«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как обрабатывать журналирование в многопроцессорных приложениях Python?

Как обрабатывать журналирование в многопроцессорных приложениях Python?

Опубликовано 8 ноября 2024 г.
Просматривать:320

How to Handle Logging in Multiprocessing Python Applications?

Ведение журнала многопроцессорной обработки в Python

При использовании модуля многопроцессорной обработки Python важно учитывать методы ведения журнала, чтобы избежать ошибок, вызванных записью нескольких процессов в один и тот же дескриптор файла одновременно. По умолчанию регистратор с поддержкой многопроцессорной обработки, предоставляемый mp.get_logger(), обеспечивает правильные механизмы блокировки в sys.stderr.

Однако модули, которые не поддерживают многопроцессорную обработку, могут нуждаться в модификациях для использования ведения журнала с поддержкой многопроцессорной обработки. Чтобы избежать этих изменений, рассмотрите альтернативные подходы:

Пользовательский обработчик журналов

Один подход — создать собственный обработчик журналов, который отправляет журналы родительскому процессу через канал. Это позволяет модулям использовать стандартный модуль журналирования, в то время как родительский процесс занимается фактическим журналированием. Вот реализация:

from logging.handlers import RotatingFileHandler
import multiprocessing, threading, logging, sys, traceback

class MultiProcessingLog(logging.Handler):
    def __init__(self, name, mode, maxsize, rotate):
        logging.Handler.__init__(self)

        self._handler = RotatingFileHandler(name, mode, maxsize, rotate)
        self.queue = multiprocessing.Queue(-1)

        t = threading.Thread(target=self.receive)
        t.daemon = True
        t.start()

Обработчик получает записи журнала от дочерних процессов и записывает их в файл, используя предоставленный обработчик файлов. Это обеспечивает централизованное ведение журнала без необходимости внесения изменений в зависимые модули.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3