使用Ipython.parallel,我如何监控任务的进度?

时间:2013-04-03 11:06:22

标签: parallel-processing monitoring ipython

这样的事情会很好:

from IPython.parallel import Client
dv=Client()[0]

import time
def waitprogress(n):
  for i in range(n):
    time.sleep(1)
    global progress
    progress=str(i)+'/'+str(n)

dv.block=False
dv.apply(waitprogress,10)

dv['progress']
# the command wait 10 seconds, then returns 9/10

这不起作用,因为IPython在搜索远程实例中的进度变量之前等待dv.apply结束。

任何想法的伟大人物?

1 个答案:

答案 0 :(得分:0)

从SO的答案:Reading the stdout of ipcluster 我找到了一个使用stdout的解决方案:

from IPython.parallel import Client
c=Client()
dv=c[0]

import time
def waitprogress(n):
  for i in range(n):
    time.sleep(1)
    print str(i)+'/'+str(n)

dv.block=False
res=dv.apply(waitprogress,10)

print c.spin() or c.metadata[res.msg_ids[0]].stdout.split()[-1]
#1/10
time.sleep(3)
print c.spin() or c.metadata[res.msg_ids[0]].stdout.split()[-1]
#4/10

如果有人有更好的解决方案,那就太棒了

相关问题