"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como lidar com o log em aplicativos Python de multiprocessamento?

Como lidar com o log em aplicativos Python de multiprocessamento?

Publicado em 2024-11-08
Navegar:163

How to Handle Logging in Multiprocessing Python Applications?

Log de multiprocessamento em Python

Ao usar o módulo de multiprocessamento do Python, é importante considerar práticas de log para evitar erros causados ​​por vários processos gravando no mesmo identificador de arquivo simultaneamente. Por padrão, o registrador com reconhecimento de multiprocessamento fornecido por mp.get_logger() garante mecanismos de bloqueio adequados em sys.stderr.

No entanto, módulos que não reconhecem multiprocessamento podem precisar de modificações para usar o log com reconhecimento de multiprocessamento. Para evitar essas alterações, considere abordagens alternativas:

Manipulador de log personalizado

Uma abordagem é criar um manipulador de log personalizado que envia logs para o processo pai por meio de um canal. Isso permite que os módulos usem o módulo de registro padrão enquanto o processo pai lida com o registro real. Aqui está uma implementação:

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()

O manipulador recebe registros de log dos processos filhos e os grava em um arquivo usando o manipulador de arquivo fornecido. Isso garante o registro centralizado sem a necessidade de fazer alterações nos módulos dependentes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3