Как мне поместить это промежуточное ПО в мой проект торнадо? - PullRequest
0 голосов
/ 17 октября 2019

В эти дни я использую opentracing, и я вижу пример промежуточного программного обеспечения. но я не знаю, как добавить его в мой проект торнадо.

код здесь:

class TracerMiddleware(object):
    def __init__(self):
        # perform initialization similar to above, including installing
        # the client_hooks
        pass

    @gen.coroutine
    def __call__(self, request, handler, next_mw):
        request_wrapper = TornadoRequestWrapper(request=request)
        span = before_request(request=request_wrapper)

        @gen.coroutine
        def next_middleware_with_span():
            yield next_mw()

        yield run_coroutine_with_span(span=span, func=next_middleware_with_span)

        span.finish()


def run_coroutine_with_span(span, func, *args, **kwargs):
    """Wrap the execution of a Tornado coroutine func in a tracing span.

    This makes the span available through the get_current_span() function.

    :param span: The tracing span to expose.
    :param func: Co-routine to execute in the scope of tracing span.
    :param args: Positional args to func, if any.
    :param kwargs: Keyword args to func, if any.
    """
    with span_in_stack_context(span):
        return func(*args, **kwargs)

1 Ответ

0 голосов
/ 19 октября 2019

Торнадо не имеет понятия «промежуточное программное обеспечение». Похоже, он предназначен для использования с подклассом Application (может быть этот ?). Лучше всего попросить авторов этого «промежуточного программного обеспечения» предоставить более точные инструкции ( см. Эту проблему ).

Обратите внимание, что эта реализация опирается на tornado.stack_context, которого больше нет вТорнадо 6. Необходимо обновить , чтобы использовать contextvars для поддержки Торнадо 6.

...