我正在将一个线程进程重写为一个多进程队列,以尝试加快大型计算的速度。我已经得到了95%的结果,但是我不知道如何使用multiprocessing
在Queue
为空时发出信号。
我的原始代码是这样的:
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()
队列函数如下:
def run_experiment(i, q):
while True:
... do stuff ...
q.task_done()
我的新代码是这样的:
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
以及新的队列函数:
def run_experiment(i, q):
while True:
... do stuff ...
## not sure what should go here
我一直在阅读文档和Google,但无法找出我缺少的东西-我知道task_done
/join
不是multiprocessing
Queue
类的一部分,但不清楚我应该使用什么。
"They differ in that Queue lacks the task_done() and join() methods introduced into Python 2.5’s Queue.Queue class." Source
但是如果没有这两种方法,我不确定队列是如何知道它已经完成的,以及如何继续使用程序。
目前没有回答
相关问题 更多 >
编程相关推荐