2016-03-21 15 views
0

私は、Python 2.7のconcurrent.futuresライブラリでキューを使用しています。以下のコードスニペットを実行すると、4つの1を印刷することは珍しくありません。私はスレッドキューをデータを共有する方法にしたいが、スレッドセーフではないようだ。どうすればスレッドセーフにすることができますか?スレッドセーフなキュー

q = Queue.Queue() 

def test(): 
    x = q.get(True) 
    print x 

def thread_pool(): 
    for x in [1,2,3,4,5]: 
     q.put(x) 
    #with concurrent.futures.ProcessPoolExecutor(max_workers=2) as executor: 
    executor = concurrent.futures.ProcessPoolExecutor(max_workers=5) 
    for x in range(5): 
     executor.submit(test) 

答えて

4

これはスレッドプールではありません。これはプロセスプールです。プロセス間でオブジェクトを共有する場合は、代わりにmultiprocessing.Queueを使用する必要があります(場合によっては、multiprocessing.Poolを使用するようにプログラム全体を切り替える必要があります。この点については、ドキュメントが不明です)。プロセスの代わりにスレッドを使用する場合は、ProcessPoolExecutorの代わりにconcurrent.futures.ThreadPoolExecutorを使用する必要があります。

関連する問題