我在一台有4个内核的计算机上运行7个工作进程。在等待map_async的结果时,我可能在这个循环中做出了糟糕的选择:
while not result.ready():
time.sleep(10)
for out in result.stdout:
print out
rec_file_list = result.get()
result.stdout
随着运行的7个进程的所有打印输出而不断增长,并导致启动映射的控制台挂起。我的MacBook Pro上的活动监视器显示7个进程仍在运行,运行Controller的终端仍处于活动状态。我有什么选择?一旦流程完成,有没有办法获得结果?
答案 0 :(得分:1)
我找到了答案: 只要数据库后端'远程内省ASyncResult对象就可以从其他客户端进行。已由控制器启用:
ipcontroller --dictb # or --mongodb or --sqlitedb
然后,可以创建一个新的客户端实例并使用以下命令检索结果:
client.get_result(task_id)
可以使用以下命令检索task_ids:
client.hub_history()
另外,避免我遇到的缓冲区溢出的一种简单方法是定期打印每个引擎的stdout历史记录中的最后几行,并刷新缓冲区,如:
from IPython.display import clear_output
import sys
while not result.ready():
clear_output()
for stdout in result.stdout:
if stdout:
lines = stdout.split('\n')
for line in lines[-4:-1]:
if line:
print line
sys.stdout.flush()
time.sleep(30)