是否可以使用multiprocessing.Event为进程池实现同步障碍?

时间:2013-05-01 20:35:05

标签: python multiprocessing

是否可以使用multiprocessing.Event为进程池实现同步障碍?我使用的是Python 2.7。但看起来事件不在进程之间共享。 我的代码有问题吗?

def test_func(event):
    event.wait()
    return datetime.datetime.now()

def log_result(result):
    result_list.append(result)

if __name__ == '__main__':
    pool_size=10
    pool = multiprocessing.Pool(processes=pool_size)
    event = multiprocessing.Manager().Event()
    for _ in xrange(pool_size):
        pool.apply_async(test_func, args=(event,), callback=log_result)
    pool.close()
    pool.join()   
    time.sleep(5)
    event.set()

1 个答案:

答案 0 :(得分:3)

你有死锁:pool.join()等待启动进程,所有进程在event.wait()上等待。 Sedd pool join:

加入()

Wait for the worker processes to exit

基本上你必须在“event.set()”之后移动“pool.join()”并且一切都应该没问题。