python AsyncResult.successful()不返回

python AsyncResult.successful()不返回,python,parallel-processing,deadlock,python-multiprocessing,Python,Parallel Processing,Deadlock,Python Multiprocessing,我正在尝试python多处理。我希望两个相互独立的进程并行运行,当它们返回时,使用ApplyAsync.successful实用程序检查该进程是否成功。但是,当我在对子进程的回调中调用successful时,脚本挂起 import multiprocessing as mp import time result_map = {} def foo_pool(x): time.sleep(2) print x return x result_list = [] def

我正在尝试python多处理。我希望两个相互独立的进程并行运行,当它们返回时,使用ApplyAsync.successful实用程序检查该进程是否成功。但是,当我在对子进程的回调中调用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()
您不需要检查successful,因为只有在结果成功时才会调用回调

以下是相关代码multiprocessing/pool.py-AsyncResult


可以非常感谢。我面临着另一个类似的问题,如果我让子进程休眠100秒,同时使用sudo kill-9杀死子进程,子进程将永远不会返回。由于资源耗尽或任何其他问题,我想注册一个子进程被终止事件。@ishu,作为一个单独的问题发布怎么样?
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]