程序如下所示,我使用python多处理包中的函数imap_unorder
from multiprocessing import Pool
def f(x):
return x,x*x
x_list = []
y_list = []
with Pool(processes=2) as pool:
for x,y in pool.imap_unordered(f, range(4)):
x_list.append(x)
y_list.append(y)
x_列表和y_列表是否保持一致
我知道函数imap_unordered不会按顺序处理输入迭代器。但是当输出x和y时,它们能同时附加到列表中吗
x_list = [0,3,1,2]
和y_list = [0,9,1,4]
就是一个正确的例子
但是我不想输出x_list = [0,3,1,2]
和y_list = [0,1,9,4]
非常感谢
x,y值将始终保持一致,因为当您将
f()
的结果合并到x_list
和y_list
中时,您回到了主进程中为了更清楚地说明这一点,请使
f()
调用花费不同的时间,如下所示:您可能会得到这样的输出,注意到
f()
的并发执行是如何导致其print语句与其他也执行其f()
的进程交错的:检查打印输出x=5的睡眠时间最短,因此在结果列表中排名第一。类似的x=6具有最长的睡眠时间,因此是输出中的最后一个睡眠时间
这些对在内部是一致的,但是使用
imap_unordered()
不能保证它们与输入iterable的顺序相同您还可以使用
zip()
将对列表转换为一对列表:相关问题 更多 >
编程相关推荐