2
我写了一个使用多处理的python程序。该程序调用8位工作人员,休眠3秒后输出一个随机数。我希望程序在3秒钟内完成,但在24秒内完成,就好像每个工作人员函数是按顺序而不是并行计算的一样。任何想法?我的python多处理程序按顺序运行工作程序
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()
不过,如果我使用过程中,而不是游泳池,我得到预期正确的结果:
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()
您也可以使用'pool.map(f,range(num_workers))',它会为您收集结果。 – Blckknght
@Blckknght,当然 - 我认为OP的问题是他们真正想要做的事情的大大简化,并且apply_async()在他们的真实应用中比map()更有意义。但是,当然,我不知道;-) –