3

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

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

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

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

4

2 回答 2

6

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

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

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

于 2010-11-03T12:20:13.250 回答
2

我会使用 PythonloggingsocketAPI。只需按照此处的示例进行操作。

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

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

于 2010-11-03T13:48:32.447 回答