【问题标题】:Reading the stdout from slave nodes with ipcluster使用 ipcluster 从从节点读取标准输出
【发布时间】:2012-03-22 13:46:06
【问题描述】:

我已经使用

设置了一个集群
ipcluster start --n=8

然后使用它访问它

from IPython.parallel import Client
c=Client()
dview=c[:]
e=[i for i in c]

我正在从节点 (e[0]-e[7]) 上运行进程,这需要花费大量时间,我希望它们向主节点发送进度报告,以便我可以密切关注如何远远超过他们。

我可以想到两种方法来做到这一点,但到目前为止,我都无法实现其中任何一种,尽管我在问题页面上搜索了数小时。

我希望节点在没有提示的情况下将一些数据推送回主节点。即在节点上运行的长进程中,我实现了一个函数,该函数定期将其进度传递给主节点。

或者我可以将节点的标准输出重定向到主节点的标准输出,然后使用 print 跟踪进度。这是我迄今为止一直在做的事情。每个节点都有自己的标准输出,因此如果远程运行 print 不会做任何事情。我尝试将 sys.stdout 推送到节点,但这只是关闭它。

我不敢相信我是唯一一个想要这样做的人,所以也许我错过了一些非常简单的东西。如何使用 ipython 跟踪远程发生的长进程?

【问题讨论】:

    标签: python parallel-processing ipython pyzmq


    【解决方案1】:

    stdout 已经被捕获、记录和跟踪,并在结果完成之前到达客户端。

    IPython 附带 an example 脚本,用于监控所有引擎的 stdout/err,可以轻松调整为仅监控此信息的子集等。

    在客户端本身中,您可以在结果完成之前检查 stdout/err (Client.metadata[msg_id].stdout) 的元数据字典。使用Client.spin() 将所有传入消息从 zeromq 套接字中清除,以确保此数据是最新的。

    如果您希望 stdout 频繁更新,请确保调用 sys.stdout.flush() 以保证流在该点实际发布,而不是依赖隐式刷新,这可能在工作完成之前不会发生。

    【讨论】:

    • 谢谢,这正是我所追求的。
    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2023-03-21
    • 2013-03-30
    相关资源
    最近更新 更多