Registro de multiprocesamiento en Python
Al utilizar el módulo de multiprocesamiento de Python, es importante considerar las prácticas de registro para evitar errores causados por múltiples procesos que escriben en el mismo identificador de archivo simultáneamente. De forma predeterminada, el registrador compatible con multiprocesamiento proporcionado por mp.get_logger() garantiza mecanismos de bloqueo adecuados en sys.stderr.
Sin embargo, los módulos que no son compatibles con multiprocesamiento pueden necesitar modificaciones para utilizar el registro compatible con multiprocesamiento. Para evitar estos cambios, considere enfoques alternativos:
Controlador de registro personalizado
Un enfoque es crear un controlador de registro personalizado que envíe registros al proceso principal a través de una tubería. Esto permite que los módulos utilicen el módulo de registro estándar mientras el proceso principal maneja el registro real. Aquí hay una implementación:
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()
El controlador recibe registros de los procesos secundarios y los escribe en un archivo utilizando el controlador de archivos proporcionado. Esto garantiza un registro centralizado sin la necesidad de realizar cambios en los módulos dependientes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3