2016-10-23 9 views
1

Greenlet에서 상속하여 작업을 만들고 있습니다. 하나의 부모 작업이 _run()의 두 자녀에 대해 start()을 호출합니다. 다른 곳 (시스템 서비스 일 경우) start()join()이 호출됩니다.자식 Greenlet의 올바른 처리

동작이 올바른 것처럼 보입니다. 예를 들어 Queue을 타임 아웃으로 사용하면 원하는 효과를 얻을 수 있지만 KeyboardInterrupt에서 자식을 종료하거나 SIGTERM의 부모 작업에 대한 콜백을 등록하는 좋은 방법을 찾지 못했습니다. 핸들러에서 child1.kill()과 'child2.kill() but only the first called seemed to raise GreenletExit'이라고 부릅니다.

나는 결코 아이들에게 join()를 부르지 않으며 나는 이것을 어떻게 올바르게 할 것인지 잘 모르겠습니다. 나는 도서관을 오용하고 있는가?

답변

0

내 실수로 하위 작업에서 gevent.greenlet.GreenletExit을 처리하고있었습니다. 이탈을 처리해야하는 경우이 예외를 포착하고 다시 사용할 수 있습니다.