使用 IPython 并行日志记录

Jan*_*kel 5 python logging ipython ipython-parallel

我正在尝试在使用 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)
Run Code Online (Sandbox Code Playgroud)

这表明应用程序记录器对每个引擎都有一个 EnginePUBHandler。接下来,我可以在单独的终端中启动 iplogger 应用程序并查看来自每个引擎的日志消息。

但是,我想要实现的是在笔记本中而不是在单独的终端中查看这些日志消息。我曾尝试通过系统调用从笔记本中启动 iplogger,但它崩溃了。