Büyük bir hesaplamayı hızlandırmak için çok işlemli bir kuyruğa dönüştürülmüş bir işlemi yeniden yazıyorum. Yolun% 95'ini aldım, ama Queue
multiprocessing
'u kullanarak ne zaman sinyal vereceğini anlayamıyorum. BöylePython Çoklu İşlem - 'Kuyruk' nesnesi 'task_done'/'join' özelliğine sahip değil
import Queue
from threading import Thread
num_fetch_threads = 4
enclosure_queue = Queue()
for i in range(num_fetch_threads):
worker = Thread(target=run_experiment, args=(i, enclosure_queue))
worker.setDaemon(True)
worker.start()
for experiment in experiment_collection:
enclosure_queue.put((experiment, otherVar))
enclosure_queue.join()
Ve kuyruk fonksiyonu:
:def run_experiment(i, q):
while True:
... do stuff ...
q.task_done()
Benim yeni kod aşağıdaki gibi bazı şeyleri olduğunu
Benim asıl kod aşağıdaki gibi bir şeydir
from multiprocessing import Process, Queue
num_fetch_threads = 4
enclosure_queue = Queue()
for i in range(num_fetch_threads):
worker = Process(target=run_experiment, args=(i, enclosure_queue))
worker.daemon = True
worker.start()
for experiment in experiment_collection:
enclosure_queue.put((experiment, otherVar))
worker.join() ## I only put this here bc enclosure_queue.join() is not available
Ve yeni kuyruk fonksiyonu:
def run_experiment(i, q):
while True:
... do stuff ...
## not sure what should go here
Ben dokümanlar ve Google'ı okuma olmuştur ama ne ben eksik anlamaya olamaz - ben task_done
/join
bir parçası değildir biliyorum multiprocessing
Queue
sınıfı, ama ne kullanmam gerektiği açık değil.
"Onlar bu Kuyruğu farklılık task_done (yoksun) ve) (Python 2.5 en Queue.Queue sınıfına sokulan yöntemleri katılırlar." Sıra yapıldığını bilir ve nasıl program ile devam etmek nasıl
Ama bunlardan birini olmadan Source, emin değilim.