多处理日志记录:锁定与队列

时间:2014-01-28 23:45:32

标签: python logging multiprocessing

背景

我计划使用logging.handler.RotatingFileHandler,而我正在使用multiprocessing从多个进程进行日志记录。

我已经看到很多建议使用multiprocessing.Queue和一个监听器进程来序列化日志记录。

问题

使用队列在multiprocessing.Lock的互斥锁中包装日志记录功能有什么好处?似乎大多数(如果不是全部)建议都是针对队列的,但我没有看到任何真正的解释原因。

1 个答案:

答案 0 :(得分:1)

队列

使用队列的优点是您的进程的日志记录调用是非阻塞的。此外,队列(使用单个工作线程)将日志消息的生成顺序保留在日志文件中。


非阻塞锁

如果要使用具有非阻塞行为的锁定,则必须以非阻塞模式获取锁定。为此,每个子进程必须缓冲日志消息。这会增加不必要的复杂性,并且可能会在保存日志消息之前引入延迟,从而导致错误的消息顺序。

阻止锁

如果要在阻止模式下使用锁定,则获取锁定时子进程不需要本地队列。但是,这会阻止代码执行。这通常是不合需要的行为,因为预计日志记录会非常快。

相关问题