0

这样的事情会很好:

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 结束。

SO的伟大人物有什么想法吗?

4

1 回答 1

0

从 SO 的答案:阅读 ipcluster 的标准输出, 我找到了使用标准输出的解决方案:

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

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

于 2013-04-03T11:40:58.447 回答