2017-11-29 7 views
1

그래서 다중 셀 브라우징 윈도우로 멀티 프로세싱을 이용하는이 프로그램을 가지고있다.SIGTERM 대신 SIGKILL로 멀티 프로세싱 풀을 죽여라. (나는 생각한다.)

pool = Pool(5) 
results = pool.map_async(worker,range(10)) 
time.sleep(10) 
pool.terminate() 

그러나이 완료 풀에서 기존의 공정을 기다립니다 :

는 다음과 같은 프로그램이 어떻게 표시되는지를 보여줍니다. 나는 모든 노동자들의 즉각적인 종식을 원한다.

+0

당신이'pool.kill()'시도해 봤어? – Andersson

+1

불행히도 Pool 객체에는 'kill'속성이 없습니다. – rjpj1998

답변

1

multiprocessing.Pool 매장 직원이 Pool._pool ATTR에서 목록을 처리 그들에게 신호를 보낼은 간단하다 :

import multiprocessing 
import os 
import signal 


def kill(pool): 
    # stop repopulating new child 
    pool._state = multiprocessing.pool.TERMINATE 
    pool._worker_handler._state = multiprocessing.pool.TERMINATE 
    for p in pool._pool: 
     os.kill(p.pid, signal.SIGKILL) 
    # .is_alive() will reap dead process 
    while any(p.is_alive() for p in pool._pool): 
     pass 
    pool.terminate() 
+0

이것은 올바른 답변입니다. 고마워. – rjpj1998