IPython.parallel 客户端在等待 map_async 的结果时挂起
IPython.parallel client is hanging while waiting for result of map_async
我是 运行 一台 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 上的 activity 监视器显示 7 个进程仍然 运行,并且终端 运行 控制器仍然处于活动状态。我在这里有什么选择?有没有办法在流程完成后获取结果?
我找到了答案:
只要控制器启用了 'database backend',就可以从另一个客户端远程自省 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)
我是 运行 一台 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 上的 activity 监视器显示 7 个进程仍然 运行,并且终端 运行 控制器仍然处于活动状态。我在这里有什么选择?有没有办法在流程完成后获取结果?
我找到了答案: 只要控制器启用了 'database backend',就可以从另一个客户端远程自省 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)