这样的事情会很好:
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结束。
任何想法的伟大人物?
答案 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
如果有人有更好的解决方案,那就太棒了