python multiprocessing returns 与 for 循环的顺序相同吗?

Will python multiprocessing returns the same sequence as for loop?

我的 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()

我想知道 multiprocessing returns 的输出是否与第一个命令相同?特别是,结果的顺序是否相同?

是的,multiprocessing.pool.Pool.map()的顺序是有序的,结果也是一样的。

imap() 变体相同,returns 结果准备就绪,但仍然保证正确的顺序。序列中稍后“过早”准备就绪的结果将被阻止,直到它们可以返回到正确的序列位置。

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