2017-12-07 5 views
0

저는 파이썬에서 멀티 프로세싱을 처음 사용하기 때문에 의심 스럽습니다. 나의 첫 번째 아이디어는 쓰레드를 사용하는 것이지만, GIL에 대해 읽고 다중 프로세싱으로 옮겼다.프로세스를 수동으로 중지해야합니까?

t1 = Process(target=run, args=lot) 
t1.start() 

내가 메인 프로세스에서 어떻게 든 그것을 중지해야 할, 또는 종료 할 때 실행() 방법은 완료 :이 같은 과정을 시작할 때

내 질문은,?

나는 같은 일이 존재()에 가입 것을 알고 있지만, 나는 모든 N분 작업을 예약하고있어 병렬 프로세스의 몇 가지를 시작하고 중지 할 때까지이 과정은 간다, 그래서 나는 정말하지 않습니다 프로세스가 완료 될 때까지 기다려야합니다.

답변

0

예 t1.start()가 발생하면 target (즉 run)에 지정된 메소드를 실행합니다. 완료되면 자동으로 종료됩니다. 대상이 더있을 것입니다 수를 실행하는 경우

당신은,

"ps -aux |grep python" or "ps -aux |grep "program_name.py" 

명령 아래에 리눅스 사용 예 실행중인 프로세스를 확인하여이를 확인할 수 있습니다.

프로세스가 작업을 완료하고 종료 할 때까지 기다리려면 join() 메소드를 사용하십시오. 그러나 귀하의 경우는

을 필요하지

더 예를 들어 현재 위치 : 음 https://pymotw.com/2/multiprocessing/basics.html

0

, GIL은 프로그램의 경우 실행을 물건을 네트워크 나 파일을 읽기와 같은 큰 당신은 많은 계산을 수행하지 않는 문제,하지만 무언가가 아니다 입력/출력 동작이 수행 될 때까지 제어 흐름이 krnel에 주어진다. 그런 다음 다른 스레드가 파이썬에서 실행될 수 있습니다.

많은 CPU 사용량으로 귀찮아하는 경우 실제로 멀티 프로세싱을 수행해야합니다.

join() 메서드는 스레드 동기화에 사용되므로 주 스레드가 다른 스레드에서 처리 한 데이터를 사용하는 경우이를 사용하는 것이 중요합니다. 그렇지 않으면 그렇지 않습니다. 운영 체제는 하위 프로세스를 안전하게 종료하는 것과 같은 작업을 처리합니다.

편집 : check this discussion 자세한 내용은