La manipulation des Signaux Threads en Python
J'ai un filetée application écrite en Python, et à chaque fois qu'une interruption est reçu via Ctrl+C ou parfois à tuer, l'application se bloque. Une trace de la pile est présenté à partir d'un fil, mais l'application reste en premier plan, et j'ai l'habitude d'arrière-plan avec Ctrl+Z puis de tenter de le tuer.
Quelle est la bonne façon de gérer des signaux et des interruptions de clavier à l'intérieur d'une tige de demande?
OriginalL'auteur Eric Pruitt | 2011-01-06
Vous devez vous connecter pour publier un commentaire.
Si vous définissez
newthread.daemon = True
avant le début de chaque thread, threads sera automatiquement tué lorsque le thread principal de sorties. Ce n'est pas précisément ce que vous demandez, mais de ce que vous avez décrit, il sonne comme il pourrait être utile de savoir.rappelez-vous juste: "les fils de Démon sont brusquement arrêté à l'arrêt. Leurs ressources (telles que les fichiers ouverts, les transactions de base de données, etc.) ne peut pas être libéré correctement." docs.python.org/2/library/threading.html et docs.python.org/3.4/library/threading.html
OriginalL'auteur Thomas K
La façon dont j'ai travaillé autour de ce problème était de faire un module qui pourrait gardé une liste de threads. Le module a également eu une méthode qui a tué tous les fils dans cette liste. Je me suis inscrit cette méthode sera appelée lorsque le
SIGINT
signal a été reçu. Enfin, j'ai créé une classe wrapper pourThread
qui permettrait d'ajouter automatiquement l'instance créée à la liste des threads.1) Ne savaient pas qu'il existait. 2) La
Thread
wrapper existait déjà à faire d'autres choses qui n'étaient pas pertinents pour cette question. Cela étant dit, le processus est toujours le même.OriginalL'auteur unholysampler
Disponible Filetage: L'Interruption D' couvre ce qui se passe pour les signaux en Python threads, et les différentes solutions à votre problème. C'est une bonne lecture.
OriginalL'auteur brildum
Utiliser le module de signal et de continuer à lire ici Les gestionnaires de signaux et l'exploitation forestière en Python sur les pièges possibles.
Pour attraper
Ctrl+C
actions de l'utilisateur que vous avez à profice un signal gestionnaire pourSIGINT
.Dans le gestionnaire de signal informer (files d'attente de messages ou RLock synchronisé attribut d'accès) de votre fils à l'arrêt, ou ce que jamais vous avez l'intention de le faire.
OriginalL'auteur Raphael Bossek