0

我在具有 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 的终端仍然处于活动状态。我在这里有什么选择?流程完成后有什么方法可以获取结果吗?

4

1 回答 1

1

我找到了答案:只要控制器启用了“数据库后端”,就可以从另一个客户端远程检查 ASyncResult 对象:

ipcontroller --dictb # or --mongodb or --sqlitedb

然后,可以创建一个新的客户端实例并使用以下命令检索结果:

client.get_result(task_id)

可以通过以下方式检索 task_ids:

client.hub_history()

此外,避免我遇到的缓冲区溢出的一种简单方法是定期打印每个引擎的标准输出历史记录的最后几行,并像这样刷新缓冲区:

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)
于 2015-03-08T14:42:12.113 回答