提问人:Jake Snell 提问时间:2/25/2021 更新时间:2/25/2021 访问量:27
多处理队列终止
Mulitprocessing queue termination
问:
我有一个程序,我想通过多处理将其分成 10 个部分。每个工作人员将使用不同的变量来搜索相同的答案来查找它(在本例中,它是暴力破解的密码)。如何让进程传达其状态,以及如何在一个进程找到答案后终止所有进程。谢谢!
答:
0赞
Booboo
2/25/2021
#1
如果您要将其分成 10 个部分,那么您应该有 10 个内核,或者至少您的工作线程函数不应 100% 受 CPU 限制。
以下代码使用一个实例初始化每个进程,工作器函数将向其写入其结果。主进程等待写入队列的第一个条目,然后终止所有池进程。对于此演示,将 worker 函数传递参数 1, 2, 3, ...10,然后休眠该时间并返回传递的参数。因此,我们期望传递参数值 1 的 worker 函数首先完成,并且程序的总运行时间应该略大于 1 秒(创建 10 个进程需要一些时间):multiprocess.Queue
import multiprocessing
import time
def init_pool(q):
global queue
queue = q
def worker(x):
time.sleep(x)
# write result to queue
queue.put_nowait(x)
def main():
queue = multiprocessing.Queue()
pool = multiprocessing.Pool(10, initializer=init_pool, initargs=(queue,))
for i in range(1, 11):
# non-blocking:
pool.apply_async(worker, args=(i,))
# wait for first result
result = queue.get()
pool.terminate() # kill all tasks
print('Result: ', result)
# required for Windows:
if __name__ == '__main__':
t = time.time()
main()
print('total time =', time.time() - t)
指纹:
Result: 1
total time = 1.2548246383666992
评论