python multiprocessing apply_async似乎是在串行运行作业

时间:2017-06-02 06:31:14

标签: python multithreading

我一直在调试这个非常简单的代码,它调用两个函数,每个函数在完成之前等待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)

1 个答案:

答案 0 :(得分:1)

pool.apply_async将函数args作为单独的参数:

pool.apply_async(double_trouble, (i,))
pool.apply_async(doubler, (i,))