Python多进程日志记录到共享文件
我使用多处理框架创建了几个并行子进程(通过JoinableQueue),但我只是在主线程中设置了日志记录(使用普通的python日志记录模块)。当我测试代码时,似乎所有子进程都能够将它们的日志放入我在主进程开始时指定的单个日志文件中,而不会出现任何问题 然而,根据,它说模块日志记录只是线程安全的,而不是进程安全的。建议使用:Python多进程日志记录到共享文件,python,logging,multiprocessing,Python,Logging,Multiprocessing,我使用多处理框架创建了几个并行子进程(通过JoinableQueue),但我只是在主线程中设置了日志记录(使用普通的python日志记录模块)。当我测试代码时,似乎所有子进程都能够将它们的日志放入我在主进程开始时指定的单个日志文件中,而不会出现任何问题 然而,根据,它说模块日志记录只是线程安全的,而不是进程安全的。建议使用: multiprocessing.logging(不具有的全部功能) 伐木) 使用mutliprocessing.Lock将连接序列化为 来自子进程的日志文件 使用loggi
但是,我确实有一个问题,如果我们处理得不好,会出现什么问题。如果我不做#1,2,3中的任何一项(如我在第一段中所述),会发生什么不良后果?我怎样才能使这些不良后果发生(我很想看到它们)?通常,您希望以某种方式进行日志写入。也就是说,在这种情况下,当有人将文本块写入日志时,该文本块将一起出现,而不是被拆分并与其他日志条目的内容混合。如果多个进程试图在没有某种中介的情况下写入一个文件,可能会导致内容的混合甚至混乱
为了故意造成这种情况,让多个进程重复地同时写入日志,而无需中介(无锁或处理进程),正如文档所建议的那样。进程越多,写入的时间越长(部分取决于缓冲区大小),就越有可能混合。谢谢(+1)@Ouroboros,所以当你说混合时,你是指以下内容吗?假设子流程A将“AAAAA”写入日志文件,而子流程B将“BBBBB”写入日志文件;如果有控制,我们可能会得到一个包含“abababba”内容的日志文件?@YujieZha是的,但是,由于缓冲,数据块往往更大。