gpt4 book ai didi

python - 我的 python 多处理程序按顺序运行工作程序

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:59 24 4
gpt4 key购买 nike

我已经使用多处理编写了一个 python 程序。该程序调用一个 8 worker,它在休眠 3 秒后输出一个随机数。我希望程序在 3 秒内完成,但它在 24 秒内完成,就好像每个工作函数是按顺序而不是并行计算的。有什么想法吗?

import time
import numpy as np
import multiprocessing as mp
import time
import sys

def f(i):
np.random.seed(int(time.time()+i))

time.sleep(3)
res=np.random.rand()
print "From i = ",i, " res = ",res


if __name__=='__main__':
num_workers=mp.cpu_count() # My CPu has 8 cores.
pool=mp.Pool(num_workers)
for i in range(num_workers):
p=pool.apply_async(f, args=(i,))
p.get()

pool.close()
pool.join()

但是,如果我使用 Process 而不是 Pool,我会得到预期的正确结果:

import time
import numpy as np
import multiprocessing as mp
import time
import sys

def f(i):
np.random.seed(int(time.time()+i))

time.sleep(3)
res=np.random.rand()
print "From i = ",i, " res = ",res
if res>0.7:
print "find it"


if __name__=='__main__':
num_workers=mp.cpu_count()
pool=mp.Pool(num_workers)
for i in range(num_workers):
p=mp.Process(target=f,args=(i,))
p.start()

最佳答案

想想你在这里做什么:

for i in range(num_workers):
p=pool.apply_async(f, args=(i,))
p.get()

每次通过循环,您都会将一些工作发送给池进程,然后(通过 .get())您明确地等待该进程返回它的结果。所以当然没有什么并行发生。

通常的做法是:

workers = [pool.apply_async(f, args=(i,)) for i in range(num_workers)]
for w in workers:
w.get()

也就是说,在等待任何一个 worker 之前,您可以启动任意数量的 worker 。

关于python - 我的 python 多处理程序按顺序运行工作程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36961987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com