Python多进程日志记录到共享fi

2024-05-05 20:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用multiprocessing框架创建了几个并行子进程(通过JoinableQueue),但我只是在主线程中设置了日志记录(使用普通的python日志记录模块)。当我测试代码时,似乎所有的子进程都能够将它们的日志放到我在主进程开始时指定的单个日志文件中,没有任何问题

但是,根据python logging cookbook,它表示模块日志记录只是线程安全的,而不是进程安全的。建议使用:

  1. multiprocessing.logging(它没有 测井)
  2. 使用mutliprocessing.Lock将连接序列化为 来自子进程的日志文件
  3. 使用logging.QueueHandler将日志发送到 一个多处理队列,然后有一个专用的登录线程 将日志记录写入日志文件的主要处理过程

所有建议的解决方案对我来说都是有意义的,实际上我能够实现解决方案3——它有效,没有问题

但是,我确实有一个问题,如果我们处理不好这个问题,会是什么问题。如果我不做#1,2,3中的任何一个(如我在第一段中所描述的),会发生什么不良后果?我怎样才能让这些坏后果发生(我很想看到它们)


Tags: 模块文件框架进程logging记录解决方案线程
1条回答
网友
1楼 · 发布于 2024-05-05 20:52:43

通常,您希望以某种方式将日志写入atomic。也就是说,在这种情况下,当有人将文本块写入日志时,该文本块会一起出现,而不是被拆分并与其他日志条目的内容混合在一起。如果多个进程试图在没有某种中介的情况下写入一个文件,则可能会导致内容的这种混合甚至混乱

为了有目的地导致这样的事情,让几个进程重复地同时写入日志,而不需要中介(没有锁或处理进程),正如文档所建议的那样。进程越多,写的时间越长(部分取决于缓冲区大小),混合的可能性就越大

相关问题 更多 >