Opentracing instrumentation for Tornado,允许对fire&forget协程进行正确的父范围传播。

tornado-coroutines-opentracing的Python项目详细描述


OpenTracing Badge

在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

  • 第一次发布。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用servlet的正确方法是什么?   java Android ListView选中所有复选框(自定义ResourceCursorAdapter)   java如何在一个活动中正确处理多个片段交互侦听器?   java jUnit和忽略继承的测试   具有多个权限的java ActivityResultLauncher   Java:我可以通过应用程序将客户端重定向到loadbalancer后面的同一个会话/节点吗?   java如何使用Hibernate保存具有一对一关系的两个类?   java JEditorPane字体大小设置不准确   java为什么JUnit4导入不被识别,即使JUnit4在我的有效pom中。xml?   多次使用流后的java空映射   JavaSwing中AccessibleContext的用途是什么?   java指定使用T的类   java查找twitter4j转发速率限制   枚举的Java数组(类)   java通过Maven build排除了一些类