Python多进程日志打印

x12m21x / 2024-03-08 / 原文

背景

因工作,需开发数据导出工具,数据较多,打算使用多进程方式处理

具体步骤

loguru

  1. 日志格式很美观
  2. 相对于logging的一堆配置,他用起来更加方便;

安装

pip install loguru

方案

由于默认情况下子进程中的日志对象,与主进程的不是同一个logger,所以日志不会打印到同一地方

重点:

  1. 主程序中开日志线程:消费子进程中打印的日志
  2. 日志队列需要从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()

  1. 子进程中需要将日志信息添加到消息队列中

logger.remove()
logger.add()