2016-10-23 8 views
1

Я создаю задачи, наследуя от Greenlet. У меня есть одна родительская задача, которая вызывает start() у двух детей в своем _run(). В другом месте (это сервис systemd) вызываются start() и join().Правильное обращение с ребенком Greenlets

Поведение кажется правильным. Например, использование Queue с таймаутами достигает желаемого эффекта, но я не нашел хорошего способа отключить детей от имени KeyboardInterrupt или зарегистрировав обратный вызов родительской задачи для SIGTERM. В обработчике я бы назвал child1.kill() и 'child2.kill() but only the first called seemed to raise GreenletExit`.

Я никогда не звоню join() на детей, и я не уверен, как я это сделаю правильно. Я злоупотребляю библиотекой?

ответ

0

Моя ошибка была в том, что я обращался с gevent.greenlet.GreenletExit в задачи ребенка. Если вам нужно обработать выход, вы можете поймать и ререйзировать это исключение.