Python 多进程日志记录到共享文件



我使用多处理框架创建了几个并行子进程(通过 JoinableQueue(,但我只是在我的主线程中设置了日志记录(使用普通的 python 日志记录模块(。当我测试代码时,似乎所有子进程都能够将其日志放入我在主进程启动时指定的单个日志文件中,而不会出现任何问题。

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

  1. multiprocessing.logging(它没有完整的功能 伐木(;
  2. 使用多处理。锁定以序列化接线 子进程中的日志文件
  3. 使用日志记录。要将日志发送到的队列处理程序 一个多处理。队列,然后在 处理将日志记录写入日志文件的主要过程

所有建议的解决方案对我来说都很有意义,我实际上能够实施解决方案#3 - 它有效,没有问题。

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

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

要故意导致这种情况,请让多个进程重复并同时写入日志,而无需中介(没有锁定或处理进程(,就像文档建议的那样。进程越多,写入时间越长(部分取决于缓冲区大小(,就越有可能混合。

相关内容

  • 没有找到相关文章

最新更新