Python多进程日志打印
背景
因工作,需开发数据导出工具,数据较多,打算使用多进程方式处理
具体步骤
loguru
- 日志格式很美观
- 相对于logging的一堆配置,他用起来更加方便;
安装
pip install loguru
方案
由于默认情况下子进程中的日志对象,与主进程的不是同一个logger,所以日志不会打印到同一地方
重点:
- 主程序中开日志线程:消费子进程中打印的日志
def log_listener(log_queue):
while True:
pass
- 日志队列需要从Manager对象创建,才可以给进程池共享
with Manager() as manager:
log_queue = manager.Queue()
log_thrd = Thread(target=log_listener, args=(log_queue))
log_thrd.start()
with Pool() as p:
r = p.async_apply(func, (log_queue, other_args))
r.get()
p.close()
p.join()
log_queue.put(None)
log_thrd.join()
- 子进程中需要将日志信息添加到消息队列中
class QueueSink(object):
def __init__(self, q):
self.q = q
def write(self, message):
# 这是一个神奇的地方:message是Message类型,继承了str,增加了record成员。
# recorde = message.record
self.q.put(message)
logger.remove()
logger.add(QueueSink(log_queue))
标签:
基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!