Dans mon programme, j'ai un tas de threads en cours d'exécution et j'essaie d'interrompre le thread principal pour l'amener à faire quelque chose de manière asynchrone. Je mis en place un gestionnaire et envoyer le processus principal un SIGUSR1 - voir le code ci-dessous:Traitement du signal en Python
def SigUSR1Handler(signum, frame):
self._logger.debug('Received SIGUSR1')
return
signal.signal(signal.SIGUSR1, SigUSR1Handler)
[signal.signal(signal.SIGUSR1, signal.SIG_IGN)]
Dans le cas ci-dessus, tous les fils et les principaux arrêts processus - point d'un « c » de voir ceci était inattendu - je veux que les discussions continuent comme elles étaient étaient avant le signal. Si je mets le SIG_IGN à la place, tout continue bien.
Quelqu'un peut-il me dire comment faire? Peut-être que je dois faire quelque chose avec le « cadre » manuellement pour revenir là où il was..just une supposition bien merci à l'avance,
Merci pour votre aide à ce sujet.
Pour expliquer un peu plus, j'ai des instances de thread écrivant des informations de chaîne à une socket qui est également sortie dans un fichier. Ces threads exécutent leurs propres temporisateurs de sorte qu'ils écrivent indépendamment leurs sorties sur le socket. Lorsque le programme s'exécute, je vois aussi leur sortie sur stdout mais tout s'arrête dès que je vois la ligne de débogage du signal.
J'ai besoin des threads pour envoyer constamment ces informations mais j'ai besoin que le programme principal prenne une commande pour qu'il commence aussi à faire quelque chose d'autre (en parallèle) pendant un moment. Je pensais pouvoir envoyer un signal depuis la ligne de commande pour déclencher cela.
* "tous les filets et le processus principal s'arrête" * Voulez-vous dire que le processus est tué? Est-ce que ça plante? –
en suivant les étapes ci-dessus dans un programme mono-thread, puis 'killall -USR1 python' a fonctionné, btw. – PypeBros