出于调试目的,我想迭代所有的greenlets并获得它们的跟踪痕迹 - 我怎么能用gevent做到这一点?
基本上,我想做this的gevent等价物。
答案 0 :(得分:18)
您可以使用gc
模块遍历堆上的所有对象并搜索greenlet。 Greenlets将堆栈跟踪存储为属性gr_frame
。
import gc
import traceback
from greenlet import greenlet
for ob in gc.get_objects():
if not isinstance(ob, greenlet):
continue
if not ob:
continue
log.error(''.join(traceback.format_stack(ob.gr_frame)))
答案 1 :(得分:0)
Gevent内置的“ print_run_info”函数将打印所有greenlet的堆栈,包括从中生成它们的堆栈:
import gevent
gevent.util.print_run_info()
文档:http://www.gevent.org/api/gevent.util.html#gevent.util.print_run_info