【发布时间】:2013-11-05 02:16:32
【问题描述】:
我有一个 gevent 应用程序,它跨多个模块生成多个 greenlet。我希望能够优雅地关闭应用程序(例如,在内部或通过捕获SIGTERM),允许greenlets 通过捕获GreenletExit 并执行finally: 子句很好地终止。
如果我拥有所有正在运行的greenlets 中的一个,我可以使用gevent.killall(list_of_greenlets),但是维护这样的列表相当麻烦;此外,gevent 必须以某种形式保存这个列表。
那么,我可以在不维护列表的情况下杀死所有已启动的 greenlet 吗?
(我在 raspbian 上的 python 2.7 上使用 gevent 1.0.0)
【问题讨论】:
-
我们需要更多关于您实施 greenlets 的详细信息。你在使用游泳池吗?也许
gevent.shutdown()适合你? -
大多数模块会简单地使用
gevent.spawn(),但有些可能会使用池或任何他们喜欢的东西。此外,在 1.0.0 中没有gevent.shutdown(),即使有,它也不能从非主 greenlet 运行,并且信号处理程序很可能以不同的方式结束。