12
デバッグの目的で、私はすべてのグリーンレットを繰り返し、トレーストレースを取得したいと思います - どのようにgeventでそれを行うことができますか?geventでは、実行中のすべてのグリーンレットのスタックトレースをダンプする方法はありますか?
基本的に、私はthisのgevent相当をしたいと思います。
デバッグの目的で、私はすべてのグリーンレットを繰り返し、トレーストレースを取得したいと思います - どのようにgeventでそれを行うことができますか?geventでは、実行中のすべてのグリーンレットのスタックトレースをダンプする方法はありますか?
基本的に、私はthisのgevent相当をしたいと思います。
gc
モジュールを使用すると、ヒープ上のすべてのオブジェクトを繰り返し処理し、グリーンレットを検索できます。グリーンレットはスタックトレースを属性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)))