gpt4 book ai didi

python - 记录 dictConfig 不适用于多处理

转载 作者:行者123 更新时间:2023-11-30 22:35:35 26 4
gpt4 key购买 nike

我的问题是:Python 日志记录配置无法使用配置文件和多重处理来工作。

我使用的是python2.7。

示例

这是我的example.py:

import json
import logging
import logging.config
import multiprocessing


def get_logger():
with open("logging.conf") as fd:
config_json_obj = json.load(fd)
#logging.config.dictConfig(config_json_obj)
logging.basicConfig(filename="my.log", level=logging.INFO)
logger = logging.getLogger(__name__)
return logger

def funSquare(num):
logger = get_logger()
# write logging info from process
logger.info(num ** 2)
return num ** 2


if __name__ == '__main__':
logger = get_logger()

logger.info("Start program")
pool = multiprocessing.Pool()
results = pool.map(funSquare, range(10))
print(results)

这是我的logging.conf文件:

{
"version": 1,
"formatters":
{
"simple":
{
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
},
"verbose":
{
"format": "%(asctime)s %(thread)s %(levelname)s %(module)s [-] %(message)s"
}
},
"handlers":
{
"console":
{
"class": "logging.StreamHandler",
"level": "DEBUG",
"formatter": "simple",
"stream": "ext://sys.stdout"
},
"file":
{
"class": "logging.FileHandler",
"formatter": "verbose",
"level": "DEBUG",
"filename": "mylog.log"
}
},
"loggers":
{
"Main":
{
"level": "INFO",
"handlers": ["console", "file"],
"propagate": 0
}
},
"root":
{
"level": "DEBUG",
"handlers": ["file"]
}
}

此时,example.py 正在运行。您将在 my.log 文件中获取主程序和新进程的日志行。

重现我的问题

现在,如果我替换行:

#logging.config.dictConfig(config_json_obj)
logging.basicConfig(filename="my.log", level=logging.INFO)

logging.config.dictConfig(config_json_obj)
#logging.basicConfig(filename="my.log", level=logging.INFO)

在 my.log 文件中,您将仅看到来自主程序的日志行,而不是来自进程的日志行。

现在我的问题:

  1. 为什么会发生这种情况?
  2. 解决方案是什么?

感谢您的帮助。

最佳答案

您不应期望从多个进程写入单个文件能够工作(在某些情况下可能有效,但不能保证)。正确的方法是使用多处理队列并由单个进程完成所有文件写入,如 this blog post 中所述。从 2010 年开始(太长,无法在此复制)。重要的是每个进程在创建后都配置日志记录。如果需要,您可以调整链接的示例以使用 dictConfig 而不是示例中显示的编程配置。

关于python - 记录 dictConfig 不适用于多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44525432/

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