我运行这样的多重处理脚本:
def intersterer(i):
somestuff
return x
if __name__ == '__main__':
pool = Pool()
list = pool.map(intersterer, itertools.combinations(xrange(great_number), 2))
我想知道如何看到工作的进展。我环顾一个共享的柜台,但它丑陋,似乎没有说实话。 (也许是错误的代码) 有人可以用一种伟大的pythonic方式帮助我吗?
编辑: 就像我的例子一样,我想将所有结果存储在一个列表中,回答问题:Show the progress of a Python multiprocessing pool map call?对此没有帮助。 THKS
EDIT2:
这是解决方法。问每个帮助者!
def intersterer(i):
somestuff
return x
numtot = binomial(number,2)
pool = Pool()
list=[]
tpsb=time.time()
for i in pool.imap_unordered(intersterer, itertools.combinations(xrange(number),2)):
list.append(i); print "{:3.2f}%, approximatly {:3.2f} seconds left \r".format(100.*len(list)/numtot, (time.time()-tpsb)*100./(100.*len(list)/numtot)-(time.time()-tpsb)),
答案 0 :(得分:2)
使用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
因此我可以使用解释器...但如果从文件和multiprocessing
完成,这也适用于标准__main__
。在此解决方案中,您必须知道将有45
组合,否则您无法获得不知道最终长度的百分比。
由于您不关心订单而只关心速度,我使用了imap_unordered
。如果您关心订单,请使用imap
。
编辑:啊哈......这是一个重复的问题。