小编use*_*265的帖子

Python多处理+ logging.FileHandler

我正在尝试在多处理服务器中实现日志记录.根据文档,"不支持从多个进程记录到单个文件".我创建了一个小程序来检查这个语句:

import logging
import multiprocessing
import os

log = logging.getLogger()


def setup_logger():
    formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s: %(message)s')

    fileHandler = logging.FileHandler('test.log')
    fileHandler.setFormatter(formatter)

    log.setLevel(logging.DEBUG)
    log.addHandler(fileHandler)


def write_log_entries(identifier, start_event):
    start_event.wait()
    for i in range(100):
        s = ''.join(str(identifier) for k in range(30))
        log.info('[{}, {}] --- {}'.format(os.getpid(), identifier, s))


if __name__ == '__main__':
    setup_logger()
    procs = []
    start_event = multiprocessing.Event()
    for i in range(100, 300):
        p = multiprocessing.Process(target=write_log_entries, args=(i, start_event))
        procs.append(p)

    for p in procs:
        p.start()

    start_event.set()

    for p in procs:
        p.join()
Run Code Online (Sandbox Code Playgroud)

在执行上面的代码后,我希望在"test.log"中看到一个完整的混乱,但是一切似乎都很好(当然,时间戳除外,它们不是按顺序排列).

任何人都可以解释为什么当多个进程同时写入日志文件时,日志条目是否重叠?在这种情况下,log.info()可以被认为是原子的吗?

python logging multiprocessing

8
推荐指数
1
解决办法
2731
查看次数

标签 统计

logging ×1

multiprocessing ×1

python ×1