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