使用Parallel Python记录工作进程

时间:2010-10-23 17:22:19

标签: python logging parallel-python

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

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

另外,我想要报告什么计算机遇到错误的过程,但我正在编写登录的代码可能不知道这些事情;也许这应该发生在ppserver级别?

(并行Python论坛上交叉发布的问题的版本,如果我从非SO用户那里得到关于此的内容,我会在这里发布答案)

2 个答案:

答案 0 :(得分:6)

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

  1. 在每个工作进程中,使用logging.handlers.SocketHandler将工作人员的事件发送到专用记录器进程。
  2. 根据https://docs.python.org/3/howto/logging-cookbook.html#sending-and-receiving-logging-events-across-a-network
  3. 文档中给出的工作示例,创建一个专用的记录器进程,用于侦听套接字上的记录事件
  4. 利润; - )
  5. 如果您在工作人员职能中捕获异常并记录它们,那么您应该能够在一个地方看到所有工作人员的错误。

答案 1 :(得分:2)

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

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

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