Maison >développement back-end >Tutoriel Python >Comment gérer efficacement les interruptions de clavier dans les pools multitraitements de Python ?
Lorsqu'ils tentent de gérer les événements KeyboardInterrupt dans les pools multitraitements de Python, les utilisateurs rencontrent souvent des problèmes de blocage du processus et nécessitant une terminaison externe. Cet article vise à résoudre ce problème et à fournir une solution réalisable.
Pour développer le défi introduit dans la question, le code fourni vise à mettre fin en douceur à tous les processus au sein d'un pool après réception d'un signal KeyboardInterrupt (en appuyant sur ^ C). Cependant, comme observé, KeyboardInterrupt déclenche une pause dans l'exécution, empêchant la procédure de terminaison prévue de prendre effet.
Ceci est attribué à un bug Python qui empêche la transmission des signaux KeyboardInterrupt au threading.Condition.wait( ) conditions. Ce problème survient car wait() ne revient pas à moins qu'un délai d'attente ne soit spécifié. Par conséquent, les KeyboardInterrupts ne sont pas reçues pendant ce processus.
Pour surmonter ce défi, la solution suggérée consiste à introduire une limite de temps à la condition wait() :
<code class="python">results = pool.map_async(slowly_square, range(40)).get(9999999)</code>
En incorporant ce timeout, la condition wait() est forcée de répondre rapidement aux signaux KeyboardInterrupt, permettant ainsi l'arrêt progressif de tous les processus au sein du pool.
Par conséquent, cette modification fournit une approche robuste pour gérer les KeyboardInterrupts dans les pools multitraitements de Python, permettant aux utilisateurs de arrêter efficacement tous les processus de manière contrôlée à tout moment.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!