gpt4 book ai didi

Python多进程记录到共享文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:26 27 4
gpt4 key购买 nike

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

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

  1. multiprocessing.logging(没有完整的功能记录);
  2. 使用 mutliprocessing.Lock 序列化连接到来自子流程的日志文件
  3. 使用 logging.QueueHandler 将日志发送到一个 multiprocessing.Queue,然后有一个专用的日志记录线程处理将日志记录写入日志文件的主要过程

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

但是,我确实有一个问题,即如果我们处理不好,会出现什么问题。如果我不执行#1、2、3 中的任何一项(如我在第一段中所述),可能会发生什么不良后果?我怎样才能让那些糟糕的后果发生(我很想看到它们)?

最佳答案

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

为了故意造成这样的事情,让多个进程在没有中介的情况下(没有锁或处理进程)重复并同时写入日志,正如文档所建议的那样。进程越多,写入时间越长(部分取决于缓冲区大小),您就越有可能混入。

关于Python多进程记录到共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57439363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com