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更改WSO2 IS证书会导致登录失败   安卓 Java随机行读取   JavaJComboBox留下了一条线索   用于嵌套对象的java Jasper报告   java动态生成Id值时,如何检索复选框的值   “拼接(a,b,…”的Java等价方法在JavaScript方法中   java在有子面板的jPanel上绘图   java生成时,在包“安卓”中找不到属性“text color”的资源标识符   java如何使用maven插件正确地构建Spring引导远jar?   readUTF中的java EOFEException   在Java中,按星期一到星期天进行排序   java MultiFormatReader无法读取qr,尽管qr是可扫描的   替换java字符串中未知数量的值   java将MySQL连接到Apache nutch   Java从3个不同的枚举中获取随机值   java我需要将多个JRadioButtongGroup和一个jcombobox连接到一个jbutton   java Android sqlite异常。无法实例化活动   如何使用单流创建Map<String,List<Long>>Java8?