我正在尝试在使用 IPython 并行时设置日志记录。具体来说,我想将日志消息从引擎重定向到客户端。因此,与其像在 IPython.parallel 中那样,每个引擎都单独记录到自己的日志文件中- 我可以将自己的日志写入引擎日志吗?,我正在寻找类似如何在 Python 中使用多处理时记录日志?
基于对 IPython 代码库的回顾,我的印象是,这样做的方法是向日志记录模块注册一个 zmq.log.hander.PUBHandler(参见 iploggerapp.py 中的文档)。我已经以各种方式尝试过这个,但似乎没有一个工作。我还尝试通过 IPython.parallel.util 注册一个记录器。connect_engine_logger,但这似乎也没有做任何事情。
更新
我在这个问题上取得了一些进展。如果我在 ipengine_config c.IPEngineApp.log_url 中指定,则 IPython 应用程序的记录器具有相应的 EnginePubHandler。我通过
%%px
from IPython.config import Application
log = Application.instance().log
print(log.handlers)
这表明应用程序记录器对每个引擎都有一个 EnginePUBHandler。接下来,我可以在单独的终端中启动 iplogger 应用程序并查看来自每个引擎的日志消息。
但是,我想要实现的是在笔记本中查看这些日志消息,而不是在单独的终端中。我曾尝试通过系统调用从笔记本中启动 iplogger,但这会崩溃。