2016-03-21 41 views
0

python 2.7 ile concurrent.futures kitaplığına sahip bir Kuyruk kullanıyorum. Bu kod snippet'ini çalıştırdığımda dört tane basmak için nadir değildir. İş parçacığı sırasının verileri paylaşmanın bir yolu olmasını istiyorum ancak iş parçacığı güvenli görünmüyor. İpliği güvenli hale nasıl getirebilirim?İş parçacığı güvenli Queue

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) 

cevap

4

Bu iş parçacığı havuzu değil. Bu bir süreç havuzu. Nesneleri işlemler arasında paylaşmak istiyorsanız, bunun yerine multiprocessing.Queue'u kullanmanız (ve muhtemelen tüm programınızı multiprocessing.Pool'u kullanarak değiştirmeniz gerekir; bu noktada belge açık değildir). Işlemler yerine iş parçacıkları kullanmak istiyorsanız, ProcessPoolExecutor yerine concurrent.futures.ThreadPoolExecutor kullanmanız gerekir.

İlgili konular