【问题标题】:Logging worker processes with Parallel Python使用 Parallel Python 记录工作进程
【发布时间】:2010-10-23 17:22:18
【问题描述】:

我继承了在集群上使用 Parallel Python 进行的一些科学计算的维护工作。使用 Parallel Python,作业被提交给一个 ppserver,它(在这种情况下)与其他计算机上已经运行的 ppserver 进程对话,将任务分发给 ppworkers 进程。

我想使用标准库日志记录模块来记录提交给 ppserver 的函数的错误和调试信息。由于这些 ppworkers 作为单独的进程(在单独的计算机上)运行,我不确定如何正确构建日志记录。我必须为每个进程登录到单独的文件吗?也许有一个日志处理程序可以让它变得更好?

另外,我想报告哪台计算机上的哪个进程发生了错误,但我编写的登录代码可能不知道这些事情;也许这应该发生在 ppserver 级别?

(在 Parallel Python 论坛上交叉发布的问题版本,如果我从非 SO 用户那里得到有关此问题的信息,我将在此处发布答案)

【问题讨论】:

    标签: python logging parallel-python


    【解决方案1】:

    解决问题的一种方法是执行以下操作:

    1. 在每个工作进程中,使用logging.handlers.SocketHandler 将来自工作进程的事件发送到专用的记录器进程。
    2. 根据https://docs.python.org/3/howto/logging-cookbook.html#sending-and-receiving-logging-events-across-a-network 文档中给出的工作示例,创建一个专用的记录器进程,用于侦听套接字上的日志记录事件
    3. 利润 ;-)

    如果您在工作程序函数中捕获异常并记录它们,那么您应该能够在一个地方获得所有工作程序的错误可见性。

    【讨论】:

      【解决方案2】:

      我会使用 Python 的 loggingsocket API。只需按照here 的示例即可。

      只需启动一个ppworker 专用于在某处进行日志记录,然后在每个其他工作人员中创建一个新的logging.Logger,并使用logging.SocketHandler 指定运行日志记录ppworker 的机器的主机名和端口。

      如果您有一个 syslog 服务器正在运行,您还可以使用 Python 的 syslog 模块,该模块记录在 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        相关资源
        最近更新 更多