我有一个gevent应用程序,可以跨多个模块生成多个greenlet.我希望能够优雅地关闭应用程序(例如内部或通过捕获SIGTERM),允许greenlet通过捕获GreenletExit和执行finally:子句很好地终止.
如果我有一个所有正在运行的greenlets,我可以做gevent.killall(list_of_greenlets),但保持这样的列表是相当麻烦的; 此外,gevent必须以某种形式保留这个列表.
那么,我可以杀死已经启动的所有greenlets而不维护它们的列表吗?
(我在raspthon上的python 2.7上使用gevent 1.0.0)
kku*_*ian 16
根据另一个SO答案,可能"遍历堆上的所有对象并搜索greenlet." 所以,我想这应该工作:
import gc
import gevent
from greenlet import greenlet
gevent.killall([obj for obj in gc.get_objects() if isinstance(obj, greenlet)])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |