多个子进程中的 Pyhtion 2.7 记录器不会将信息记录到日志文件中

Posted

技术标签:

【中文标题】多个子进程中的 Pyhtion 2.7 记录器不会将信息记录到日志文件中【英文标题】:Pyhtion 2.7 logger in multiple subprocesses doesn't log info into log files 【发布时间】:2019-12-04 07:52:40 【问题描述】:

我正在使用“multiprocessing.Process”来启动多个子进程。每个子进程都是相同的 python 脚本,它实例化 Logger 并将不同的级别写入日志文件。只要它是相同的脚本,它就会在每个子进程中创建具有相同名称的 Logger。

此外,每个子进程都有唯一的 ID,并记录包括该唯一 ID 在内的信息。

我发现日志文件完全丢失了一些 ID,即整个子进程没有日志输出。

【问题讨论】:

【参考方案1】:

答案在这里:

虽然日志记录是线程安全的,并且支持在单个进程中从多个线程记录到单个文件,但不支持从多个进程记录到单个文件,因为没有标准方法可以序列化对单个文件的访问在 Python 中跨多个进程的文件。如果您需要从多个进程记录到单个文件,一种方法是让所有进程记录到 SocketHandler,并有一个单独的进程实现从套接字读取并记录到文件的套接字服务器。 (如果您愿意,您可以在现有进程之一中指定一个线程来执行此功能。)本节更详细地记录了这种方法,并包括一个工作套接字接收器,它可以用作您在您的自己的应用程序。

如果您使用的是包含多处理模块的最新版本的 Python,您可以编写自己的处理程序,该处理程序使用该模块中的 Lock 类来序列化进程对文件的访问。现有的 FileHandler 和子类目前不使用多处理,尽管它们将来可能会这样做。请注意,目前,多处理模块并未在所有平台上提供工作锁功能(请参阅https://bugs.python.org/issue3770)。

https://docs.python.org/2/howto/logging-cookbook.html#logging-cookbook

【讨论】:

以上是关于多个子进程中的 Pyhtion 2.7 记录器不会将信息记录到日志文件中的主要内容,如果未能解决你的问题,请参考以下文章

Python:产生具有几个要求的子进程

Access 使用子表单一次添加多个记录

java并发编程之美-阅读记录1

Python 2.7:调用 subprocess.popen 阻止文件访问

python子进程中的多个输入和输出通信

为啥与多个 Popen 子进程一起使用时会出现通信死锁?