我想计算IPython的map_async调用函数f
的次数(所以我可以监视进度)。我试图通过f
打印消息来实现此目的:
from IPython.parallel import Client
from time import sleep
def f(x):
from time import sleep
sleep(1)
print x
return x**2
c = Client()
view = c[:]
parallel_result = view.map_async(f, range(10))
while not parallel_result.ready():
sleep(.5)
print parallel_result.stdout
结果是:
['', '']
['', '']
['', '']
[u'0\n1', u'5\n6']
[u'0\n1', u'5\n6']
[u'0\n1\n2', u'5\n6\n7']
[u'0\n1\n2', u'5\n6\n7']
[u'0\n1\n2\n3', u'5\n6\n7\n8']
[u'0\n1\n2\n3', u'5\n6\n7\n8']
[u'0\n1\n2\n3\n4\n', u'5\n6\n7\n8\n9\n']
parallel_result.stdout
的输出是累积的,如果f
需要运行数百万次,这就是一个问题。如何在检查后清除parallel_result.stdout
以便每次检查时我只获得新的输出? (我在print语句之后尝试了parallel_result.stdout=[]
,但这似乎阻止了任何事情进入parallel_result.stdout
)。
或者,有没有办法f
增加共享计数器?提前谢谢!