【问题标题】:python multiprocessing apply_async seems to be running jobs in seriespython multiprocessing apply_async 似乎正在连续运行作业
【发布时间】:2017-06-02 06:31:13
【问题描述】:

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

【问题讨论】:

  • 这确实应该被设计为引发错误。

标签: python multithreading


【解决方案1】:

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

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

【讨论】:

  • 谢谢你!现在工作正常。无论如何,它的运行让我感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多