【发布时间】:2019-12-17 17:52:39
【问题描述】:
我使用多处理框架创建了几个并行子进程(通过 JoinableQueue),但我只是在我的主线程中设置了日志记录(使用普通的 python 日志记录模块)。当我测试代码时,似乎所有子进程都能够将它们的日志放入我在主进程开始时指定的单个日志文件中,没有任何问题。
但是,根据python logging cookbook,它说模块日志记录只是线程安全的,而不是进程安全的。建议使用:
- multiprocessing.logging(不具备 记录);
- 使用 mutliprocessing.Lock 将接线序列化到 来自子进程的日志文件
- 使用 logging.QueueHandler 将日志发送到 一个 multiprocessing.Queue,然后有一个专用的日志记录线程 处理将日志记录写入日志文件的主要过程
所有建议的解决方案对我来说都很有意义,而且我实际上能够实施解决方案 #3 - 它有效,没有问题。
但是,我确实有一个问题,如果我们处理不好会出现什么问题。如果我没有执行 #1,2,3 中的任何一项(如我在第一段中所述),可能会发生什么不良后果?我怎样才能让这些不良后果发生(我很想看到它们)?
【问题讨论】:
标签: python logging multiprocessing