14

出于调试目的,我想遍历所有 greenlet 并获取它们的跟踪痕迹——我怎样才能用 gevent 做到这一点?

基本上,我想做与 gevent 等效的this

4

2 回答 2

19

您可以使用该gc模块遍历堆上的所有对象并搜索greenlets。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)))
于 2012-09-23T16:09:35.807 回答
-1

Gevent 的内置“print_run_info”函数将打印所有 greenlets 的堆栈,包括它们产生的堆栈:

import gevent
gevent.util.print_run_info()

文档:http ://www.gevent.org/api/gevent.util.html#gevent.util.print_run_info

于 2020-04-27T14:06:54.103 回答