【问题标题】:Will python multiprocessing returns the same sequence as for loop?python多处理会返回与for循环相同的序列吗?
【发布时间】:2020-12-02 22:22:31
【问题描述】:

我的 for 循环如下所示:

function1_values = [function1(solution[i])for i in range(0,pop_size)]

我正在尝试使用多处理来节省一些计算时间。我的想法如下

cores = multiprocessing.cpu_count() - 1
pool = multiprocessing.Pool(processes=cores)
function_values = pool.map(function1, solution[:len(pop_size))
pool.close()
pool.join()

我想知道多处理是否会返回与第一个命令相同的输出?特别是,结果的顺序会一样吗?

【问题讨论】:

  • 如果你的假设是正确的,为什么不试试呢?
  • 如果其中一个选项可能是不确定的,那么尝试会有问题吗?

标签: python python-3.x python-multiprocessing


【解决方案1】:

是的,multiprocessing.pool.Pool.map()的顺序是有序的,结果顺序相同。

imap() 变体也是如此,它在结果准备好时返回结果,但仍保证正确的顺序。序列中“过早”准备好的结果将被保留,直到它们可以返回到正确的序列位置。

如果您不关心序列,则有一个变体方法imap_unordered(),它不仅会在结果准备好时返回结果,而且可能会不按顺序返回它们,以先完成者为准;如果每个结果的计算时间存在差异,并且结果没有任何特定的顺序(和/或有标签指示哪个是哪个),这将很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 2013-10-13
    • 1970-01-01
    • 2021-05-20
    • 2021-12-17
    • 2015-12-30
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多