0

나는 파이썬 다중 처리에 내 손을 노력하고 있어요. 나는 서로 독립적 인 두 개의 프로세스를 병렬로 실행하고 프로세스가 성공했는지 또는 ApplyAsync.successful() 유틸리티를 사용하지 않았는지 확인을 반환합니다. 그러나 내 서브 프로세스에 대한 콜백에서 성공적으로 호출하면 스크립트가 중단됩니다.파이썬 AsyncResult.successful() 반환하지 않습니다

import multiprocessing as mp 
import time 

result_map = {} 

def foo_pool(x): 
    time.sleep(2) 
    print x 
    return x 


result_list = [] 
def log_result(result): 
    print result_map[result].successful() #hangs                        
    result_list.append(result) 


def apply_async_with_callback(): 
    pool = mp.Pool() 
    for i in range(10): 
     result_map[i] = pool.apply_async(foo_pool, args = (i,), callback = log_result) 

    pool.close() 
    pool.join() 

    print(result_list) 



if __name__ == '__main__': 
    apply_async_with_callback() 

답변

0

당신은 결과가 성공적 일 때 콜백 만 호출되기 때문에 successful()을 확인 할 필요가 없습니다.

def _set(self, i, obj): 
    self._success, self._value = obj 
    if self._callback and self._success: # <----- 
     self._callback(self._value)  # <----- 
    self._cond.acquire() 
    try: 
     self._ready = True 
     self._cond.notify() 
    finally: 
     self._cond.release() 
    del self._cache[self._job] 
+0

좋아 - 다음

는 관련 코드 (AsyncResultmultiprocessing/pool.py)입니다. 고맙습니다. 나는 또 다른 비슷한 문제에 직면하고있다. 만약 서브 프로세스를 100 초 동안 잠자기 상태로 놓고 sudo kill -9를 사용하여 서브 프로세스를 죽이면 하위 프로세스는 결코 돌아 오지 않는다. 자원 고갈 또는 다른 문제로 인해 "죽는 하위 프로세스"이벤트를 등록하고 싶습니다. – ishu

+0

@ishu, 분리 된 질문으로 게시하는 것은 어떻습니까? – falsetru

관련 문제