Compartir bloqueos entre procesos de Python
Al intentar utilizar un bloqueo entre múltiples procesos, es posible que encuentre el error "Bloquear objetos solo debe compartirse entre procesos a través de la herencia."
Para resolver esto, hay dos enfoques principales:
Usar un Manager
Este enfoque implica crear un objeto Manager y pasar un Manager.Lock():
from multiprocessing import Manager ... m = Manager() l = m.Lock()
Sin embargo, el uso de un administrador introduce la necesidad de un proceso adicional para alojar el servidor del administrador y comunicarse a través de IPC.
Pasar el bloqueo en el grupo Creación
Un método alternativo es pasar el multiprocesamiento normal.Lock() en el momento de la creación del grupo usando el argumento de palabra clave inicializador:
def init(l): global lock lock = l l = multiprocessing.Lock() pool = multiprocessing.Pool(initializer=init, initargs=(l,))
Este método hace que la instancia de bloqueo sea global en todos los trabajadores secundarios. Tenga en cuenta que este enfoque elimina la necesidad de la función parcial.
Al emplear una de estas técnicas, puede compartir bloqueos de manera efectiva entre procesos de Python, lo que permite el acceso coordinado a recursos compartidos.
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