2016-10-23 1 views
1

Je crée des tâches en héritant de Greenlet. J'ai une tâche parent unique qui appelle start() sur deux enfants dans son _run(). Ailleurs (il se trouve être un service systemd) start() et join() sont appelés.Gestion correcte de l'enfant Greenlets

Le comportement semble correct. Par exemple l'utilisation d'un Queue avec des délais d'attente atteint l'effet désiré mais je n'ai pas trouvé un bon moyen d'éteindre les enfants par exemple KeyboardInterrupt ou en enregistrant un rappel à la tâche parente pour SIGTERM. Dans le gestionnaire j'appellerais child1.kill() et 'child2.kill() but only the first called seemed to raise GreenletExit`.

Je n'appelle jamais join() sur les enfants et je ne sais pas comment je ferais cela correctement. Est-ce que j'utilise mal la bibliothèque?

Répondre

0

Mon erreur était que je traitais gevent.greenlet.GreenletExit dans les tâches enfant. Si vous devez gérer la sortie, vous pouvez intercepter et relancer cette exception.