"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo compartir un bloqueo entre procesos en Python usando multiprocesamiento

Cómo compartir un bloqueo entre procesos en Python usando multiprocesamiento

Publicado el 2024-11-05
Navegar:337

How to Share a Lock Between Processes in Python Using Multiprocessing

Compartir un bloqueo entre procesos en Python

Al intentar utilizar pool.map() para apuntar a una función con múltiples parámetros, incluido un objeto Lock(), es Es crucial abordar la cuestión de compartir el bloqueo entre subprocesos. El multiprocesamiento convencional.Lock() no se puede pasar directamente a los métodos Pool debido a limitaciones de decapado.

Opción 1: usar Manager y Manager.Lock()

Un enfoque es utilizar Manager() y crear una instancia de Manager.Lock(). Si bien este método es confiable, implica más gastos generales debido al proceso adicional que aloja el servidor Manager. Además, las operaciones de bloqueo requieren comunicación con este servidor a través de IPC.

Opción 2: Pasar el bloqueo en la creación del grupo con el inicializador

Alternativamente, puede pasar el multiprocesamiento regular.Lock() durante la inicialización del grupo usando el argumento de la palabra clave inicializador. Esto garantiza que la instancia de bloqueo sea global en todos los trabajadores infantiles. Este método elimina la necesidad de funciones parciales y agiliza el proceso.

Aquí hay un ejemplo usando la Opción 2:

def target(iterable_item):
    for item in items:
        # Do cool stuff
        if (... some condition here ...):
            lock.acquire()
            # Write to stdout or logfile, etc.
            lock.release()

def init(l):
    global lock
    lock = l

def main():
    iterable = [1, 2, 3, 4, 5]
    l = multiprocessing.Lock()
    pool = multiprocessing.Pool(initializer=init, initargs=(l,))
    pool.map(target, iterable)
    pool.close()
    pool.join()
Declaración de liberación Este artículo se reimprime en: 1729132755 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

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