Opentracing instrumentation for Tornado,允许对fire&forget协程进行正确的父范围传播。
tornado-coroutines-opentracing的Python项目详细描述
在python opentracing中支持fire&forget Tornado协同程序
Opentracing python library提供了很好的基于协程的跟踪Tornado代码的机制。在
必须使用tracer_stack_context调用协同例程,该上下文允许隔离上下文并在子组件中使用父作用域。只有当你在内部产生子协同程序时,它才有效,但是对于fire&forget-coroutine则不起作用。 在这种情况下,这种协程可能会失去父作用域,而产生或取得不相关协程的作用域(例如并发协程)。在
为了避免这种情况,您必须手动通过tracer_stack_context来包装协程,并在协程内部激活所需的父作用域:
from tornado import gen from opentracing import global_tracer from opentracing.scope_managers.tornado import tracer_stack_context @gen.corotine def do_someting_in_background(parent): with global_tracer().scope_manager.activate(parent, False): with global_tracer.start_active_span('do something', True): yield gen.sleep(0.5) # do something ... with global_tracer().start_active_span('work in background') as root: with tracer_stack_context(): do_someting_in_background(root.span)
ff®协同程序
此库提供了ff嫒co routinedecorator,它为您提供:
^{pr2}$它也适用于嵌套的协同程序:
from opentracing import global_tracer from tornado_coroutines_opentracing import ff_coroutine @ff_coroutine def bar(): with global_tracer.start_active_span('bar', True): # do something @ff_coroutine def foo(): with global_tracer.start_active_span('foo', True): yield gen.sleep(0.5) bar() ... with global_tracer().start_active_span('work in background'): foo()
ff_协同路径与龙卷风协同路径(via通用协同程序):
from opentracing import global_tracer from tornado_coroutines_opentracing import ff_coroutine @ff_coroutine def bar(): with global_tracer.start_active_span('bar', True): # do something @ff_coroutine def foo(): with global_tracer.start_active_span('foo', True): yield bar() yield gen.sleep(0.5) ... with global_tracer().start_active_span('work in background'): yield foo()
有时您希望在应用程序中禁用跟踪。您也可以禁用ff协同程序:
from tornado_coroutines_opentracing import State ... State.enabled = False
0.1.0
- 第一次发布。在
- 项目
标签: