在gevent中,我如何转储所有正在运行的greenlet的堆栈跟踪?

问题描述 投票:14回答:2

出于调试目的,我想遍历所有greenlet并获取其跟踪记录-如何使用gevent做到这一点?

基本上,我想做等同于this的gevent。

python gevent
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)))

0
投票

Gevent的内置“ format_run_info”函数将打印所有greenlet的堆栈,包括从中生成它们的堆栈:

import gevent
gevent.util.format_run_info()

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.