"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 manejar las interrupciones del teclado en la piscina de múltiples procesos de Python?

¿Cómo manejar las interrupciones del teclado en la piscina de múltiples procesos de Python?

Publicado el 2025-04-20
Navegar:979

How to Handle Keyboard Interruptions in Multiprocessing Pools with Python?

Interrupciones de teclado El manejo en grupos de multiprocesamiento con python

manejo de entradas de teclado es crucial para administrar procesos paralelos de manera efectiva. La biblioteca de multiprocesamiento proporciona una forma de crear un grupo de procesos de trabajadores que puedan ejecutar tareas simultáneamente. Sin embargo, surge un problema cuando se inicia un keyboardinterrume durante la ejecución de estos procesos.

Problema:

en el código de python dado, se crea un grupo y se intenta manejar las interrgues de teclado utilizando un bloque de intento. Sin embargo, el código correspondiente dentro del bloque excepto nunca se ejecuta, dejando el programa colgando.

try:
    results = pool.map(slowly_square, range(40))
except KeyboardInterrupt:
    pool.terminate()
    print("You cancelled the program!")
    sys.exit(1)

causa:

Este problema es causado por un error en Python donde las interrupciones de teclado no se envían cuando se espera una condición en threading.condition.wait (). En la biblioteca de multiprocesamiento, el grupo utiliza una variable de condición para esperar los resultados de la operación MAP (). Cuando se produce una tarea de teclado, la variable de condición espera () no regresa, evitando así que la interrupción se maneje.

solución:

para resolver este problema, una solución alternativa es especificar un tiempo de espera al esperar los resultados. Esto se puede lograr reemplazando la llamada map () con map_async (). Get (timeout), donde el tiempo de espera se establece en un valor grande.

results = pool.map_async(slowly_square, range(40)).get(9999999)
Declaración de liberación Este artículo se reproduce en: 1729576518 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