我有一个gevent应用程序,它跨多个模块生成多个greenlet。我希望能够优雅地关闭应用程序(例如,在内部或通过捕捉SIGTERM
),允许greenlets通过捕捉GreenletExit
并执行finally:
子句来很好地终止。在
如果我有所有运行greenlet的a,我可以做gevent.killall(list_of_greenlets)
,但是维护这样一个列表相当麻烦;此外,gevent必须以某种形式保存这个列表。在
那么,我可以在不维护列表的情况下杀死所有已经启动的绿精灵吗?在
(我在raspbian的python2.7上使用gevent 1.0.0)
根据another SO answer,有可能“遍历堆上的所有对象并搜索greenlets”。因此,我认为这应该是可行的:
这在我使用的gevent(1.2.2)和greenlet(0.4.13)版本中不太管用,但下面的代码可以:
相关问题 更多 >
编程相关推荐