我一直在调试这个非常简单的代码,它调用两个函数,每个函数在完成之前等待1秒。我知道apply_async假设从一个工作池并行运行作业。因此,如果提交了10个工作程序和20个等待命令,则程序应该运行总共2秒,因为1秒等待命令中的10个应该并行运行10个进程。我的代码有20个等待命令,持续运行大约20秒,这表明我尝试并行化我的代码是行不通的。无论我的游泳池中有多少工人,它都会运行20秒吗?是否有人建议我可能做错了什么?谢谢!
from multiprocessing import Pool
def doubler(number):
time.sleep(1)
def double_trouble(number):
time.sleep(1)
if __name__ == '__main__':
start_time = time.time()
pool = Pool(processes=10)
for i in range(10):
pool.apply_async(double_trouble(i))
pool.apply_async(doubler(i))
pool.close()
pool.join()
print ("We took second: ", time.time()-start_time)
答案 0 :(得分:1)
pool.apply_async
将函数args作为单独的参数:
pool.apply_async(double_trouble, (i,))
pool.apply_async(doubler, (i,))