1

考虑以下代码段:

import logging
import logging.config
from multiprocessing import Process, set_start_method

try:
    set_start_method('spawn')
except RuntimeError:
    pass


def log(logger):
    for _ in range(10):
        logger.info('FLAG2')


if __name__ == '__main__':
    config = {
        "version": 1,
        "formatters": {
            "timestamp": {
                "format": "%(asctime)s: %(message)s"
            },
        },
        "handlers": {
            "stdout": {
                "level": "INFO",
                "formatter": "timestamp",
                "class": "logging.StreamHandler",
                "stream": "ext://sys.stdout"
            },
        },
        "loggers": {
            "some_logger": {
                "level": "INFO",
                "handlers": ["stdout"]
            }
         }
    }

    logging.config.dictConfig(config)

    logger = logging.getLogger("some_logger")

    for _ in range(10):
        logger.info('FLAG1')

    p = Process(target=log, args=(logger,))

    p.start()

    p.join()

这将打印FLAG1十次,包括时间戳,FLAG2不会写入标准输出。如果我删除对 的调用set_start_method('spawn')FLAG1和都会FLAG2显示,我想这是因为生成的线程缺少由dictConfig. 不过,有没有办法将记录器传递给生成的线程并保留相同的记录行为,而不必传递记录器配置字典?

4

0 回答 0