在等待map_async的结果时,IPython.parallel客户端挂起

时间:2015-03-06 17:30:03

标签: ipython-parallel

我在一台有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的终端仍处于活动状态。我有什么选择?一旦流程完成,有没有办法获得结果?

1 个答案:

答案 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)