2016-10-23 65 views
1

我通過繼承Greenlet來創建任務。我有一項父母任務,在_run()的兩個孩子身上撥打start()。在其他地方(恰好是系統服務)start()join()被調用。正確處理兒童Greenlets

行爲似乎是正確的。例如,使用帶有超時的Queue可以達到所需的效果,但我還沒有找到一種很好的方法來從說KeyboardInterrupt中關閉子項或通過向SIGTERM的父任務註冊回調。在處理程序中,我會打電話child1.kill()和'child2.kill()but only the first called seemed to raise GreenletExit`。

我從來沒有打電話join()對孩子,我不知道我會如何做到這一點。我濫用圖書館嗎?

回答

0

我的錯誤是我在處理子任務中的gevent.greenlet.GreenletExit。如果您需要處理退出,您可以捕獲並重新評估此異常。