Правильное обращение с детскими гринлетами

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

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

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

1 ответ

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

Другие вопросы по тегам