在进程池中排序 python
Ordering in process pool python
我正在尝试 return 在 python 中并行处理 运行 的结果。这是代码。
from dateutil.parser import parse
from multiprocessing.dummy import Pool
from itertools import *
import time
import random
def abcd(a):
time.sleep(a)
print(a)
return a
p = Pool(3)
a = p.starmap(abcd, zip([10, 2, 15]))
p.close()
p.join()
print(a)
结果总是return按照 zip 中数组的顺序编辑吗?
无法保证它们的顺序相同,因为最终 OS 会处理进程的调度。它们可能以相同的顺序结束,如果您在 starmap()
中将 chunksize
设置为 1,则可能会增加出现这种情况的机会。否则,结果充其量将按块大小分组的执行顺序排列。
如果你之后需要知道原始顺序,我使用的技巧是只传入一个索引(或 numpy.ndindex
用于 n 维数据),它只是由工作函数重新发出.
Pool.starmap
(和 Pool.map
)将 return 按参数传递给它们的顺序排列的值——但这并不意味着它们将是 运行为了。如果您不关心顺序并且可以接受 无序 结果(以及可能更高的性能),那么 Pool.imap_unordered
.
我正在尝试 return 在 python 中并行处理 运行 的结果。这是代码。
from dateutil.parser import parse
from multiprocessing.dummy import Pool
from itertools import *
import time
import random
def abcd(a):
time.sleep(a)
print(a)
return a
p = Pool(3)
a = p.starmap(abcd, zip([10, 2, 15]))
p.close()
p.join()
print(a)
结果总是return按照 zip 中数组的顺序编辑吗?
无法保证它们的顺序相同,因为最终 OS 会处理进程的调度。它们可能以相同的顺序结束,如果您在 starmap()
中将 chunksize
设置为 1,则可能会增加出现这种情况的机会。否则,结果充其量将按块大小分组的执行顺序排列。
如果你之后需要知道原始顺序,我使用的技巧是只传入一个索引(或 numpy.ndindex
用于 n 维数据),它只是由工作函数重新发出.
Pool.starmap
(和 Pool.map
)将 return 按参数传递给它们的顺序排列的值——但这并不意味着它们将是 运行为了。如果您不关心顺序并且可以接受 无序 结果(以及可能更高的性能),那么 Pool.imap_unordered
.