a的进展itertools.组合pool()映射,结果传入lis

2024-09-27 07:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我运行的多进程脚本如下:

def intersterer(i):
    somestuff
    return x

if __name__ == '__main__':
    pool = Pool() 
    list = pool.map(intersterer, itertools.combinations(xrange(great_number), 2))  

我想知道怎样才能看到工作的进展。我环顾一个共用的柜台,但它很丑,似乎没有说实话。(可能是其中的一个错误代码) 有人能帮我个大Python吗?在

编辑: 和我的例子一样,我希望将所有结果存储在一个列表中,问题的答案:Show the progress of a Python multiprocessing pool map call?对此没有帮助。厚度

编辑2:

这是焊接方法。谢谢每一个帮手!在

^{pr2}$

Tags: name脚本编辑mapreturnif进程main
1条回答
网友
1楼 · 发布于 2024-09-27 07:27:52

使用imap_unordered代替map

>>> from pathos.multiprocessing import Pool
>>> pool = Pool() 
>>> import itertools
>>> 
>>> def interstellar(i):
...   return sum(i)**2
... 
>>> result = []
>>> for i in pool.imap_unordered(interstellar, itertools.combinations(xrange(10),2)):
...   result.append(i); print "{:3.2f}%".format(100.*len(result)/45)
... 
2.22%
4.44%
6.67%
8.89%
11.11%
13.33%
15.56%
17.78%
20.00%
22.22%
24.44%
26.67%
28.89%
31.11%
33.33%
35.56%
37.78%
40.00%
42.22%
44.44%
46.67%
48.89%
51.11%
53.33%
55.56%
57.78%
60.00%
62.22%
64.44%
66.67%
68.89%
71.11%
73.33%
75.56%
77.78%
80.00%
82.22%
84.44%
86.67%
88.89%
91.11%
93.33%
95.56%
97.78%
100.00%
>>> result
[1, 4, 9, 16, 25, 36, 49, 64, 81, 9, 16, 25, 36, 49, 64, 81, 100, 25, 36, 49, 64, 81, 100, 121, 49, 64, 81, 100, 121, 144, 81, 100, 121, 144, 169, 121, 144, 169, 196, 169, 196, 225, 225, 256, 289]

我很懒,使用pathos.multiprocessing这样我就可以在解释器中工作了……但是如果从文件和__main__中完成,那么这也适用于标准multiprocessing。在这个解决方案中,您必须知道将有45组合,否则您将无法获得不知道最终长度的百分比。在

因为您不关心顺序,只关心速度,所以我使用了imap_unordered。如果您确实关心顺序,请使用imap。在

编辑:啊哈…这是一个重复的问题。在

相关问题 更多 >

    热门问题