Python多进程Logging实现疑问:日志调用方式及初始化正确性咨询
Python多进程日志(pool.imap_unordered场景)问题解答
关于自研Test类代码的疑问
- 多进程执行的process_row、evaluate函数:如果这两个是类的成员方法,且子进程能正常获取到
self.logger实例(注意多进程对象序列化的坑,若logger不可序列化会报错),优先用self.logger.info;要是这两个是独立函数,或者类方法无法在子进程中正确传递logger实例,就用logging.info——但前提是子进程已继承主进程的logging配置。 - __init__和main_func方法:使用
self.logger.info是正确的,这两个方法在类实例所在进程(通常为主进程)执行,直接调用实例化的logger,能保证日志完全匹配你配置的格式、级别规则。
关于参考示例代码的疑问
- 主函数启动QueueListener前:优先用
logging.info。QueueHandler是logging体系的一部分,只要你已将lg_handler(QueueHandler)添加到root logger或对应logger中,调用logging.info会自动将日志消息放入队列,交由QueueListener处理。直接调用lg_handler.info虽能发消息,但不符合logging的分层设计逻辑,后续修改配置会很受限。 - func函数里用logging.info而非lg_handler.info:完全正确。logging模块的设计初衷就是让你通过顶层的
logging.info(或指定logger)发送日志,而非直接操作handler。这样不管后续把handler换成何种类型(比如文件输出),业务代码都无需改动;且多进程场景下,子进程继承主进程的logging配置后,logging.info能自动将消息传入队列,由主进程的QueueListener统一处理输出。
内容的提问来源于stack exchange,提问作者faith76
相关产品推荐
相关产品推荐

