2016-12-14 66 views
0

我有創建ThreadPool的主線程。在調用函數之前,使初始化池中的每個線程。所有線程將被初始化時如何等待?等待初始化池中的所有線程

例子:

from multiprocessing.pool import ThreadPool 

def main(): 
    # in main thread 
    pool = ThreadPool(processes=5, initializer=init_pool) 

    # >>> here it is I want to wait for initialized 

    pool.map_async(do_smth).get() 

def init_pool(): 
    # initialized new thread in pool 
    pass 

def do_smth(): 
    # do somethings 
    pass 

有必要不引起map_async如果發生

+0

我可以使用值從多處理用於此目的,但它是不漂亮的解決方案 – deniska369

回答

1

一個線程異常的初始化我會實現你的do_smth() - 函數一個barrier並跳過init_pool。但是這隻能從Python 3.2開始。

障礙具有預定義數量的參與方必須調用障礙的功能wait。當屏障登記正確的呼叫數量時,它會「下降」,呼叫方同時返回到他們的工作。

類似的東西:

from multiprocessing.pool import ThreadPool 
from threading import Barrier 

b = Barrier(parties=5) 

def main(): 
    # in main thread 
    pool = ThreadPool(processes=5) 

    pool.map_async(do_smth).get() 

def do_smth(): 
    #initialize here 
    b.wait() #call to the barrier 
    # do somethings 
    pass 
+0

酷,謝謝!儘管我用Python 2.7編寫,但您的答案對我有幫助! 我可以模擬這樣的障礙 http://stackoverflow.com/a/26703365/4181533 – deniska369