2013-05-01 65 views
1

是否可以使用multiprocessing.Event爲進程池實現同步屏障?我正在使用Python 2.7。但它看起來像事件不在進程之間共享。 我的代碼有問題嗎?是否可以使用multiprocessing.Event爲進程池實現同步屏障?

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() 

回答

2

你有死鎖:pool.join()等待啓動的進程,所有的進程等待event.wait()。 SEDD池加入:

join()方法

Wait for the worker processes to exit 

基本上你後移動 「()pool.join」 「event.set()」 和所有的應該沒問題。

+0

你是對的我的錯。 – leon01 2013-05-01 21:10:28