我计划使用logging.handler.RotatingFileHandler
,而我正在使用multiprocessing
从多个进程进行日志记录。
我已经看到很多建议使用multiprocessing.Queue
和一个监听器进程来序列化日志记录。
使用队列在multiprocessing.Lock
的互斥锁中包装日志记录功能有什么好处?似乎大多数(如果不是全部)建议都是针对队列的,但我没有看到任何真正的解释原因。
答案 0 :(得分:1)
使用队列的优点是您的进程的日志记录调用是非阻塞的。此外,队列(使用单个工作线程)将日志消息的生成顺序保留在日志文件中。
如果要使用具有非阻塞行为的锁定,则必须以非阻塞模式获取锁定。为此,每个子进程必须缓冲日志消息。这会增加不必要的复杂性,并且可能会在保存日志消息之前引入延迟,从而导致错误的消息顺序。
如果要在阻止模式下使用锁定,则获取锁定时子进程不需要本地队列。但是,这会阻止代码执行。这通常是不合需要的行为,因为预计日志记录会非常快。