Py学习  »  tornado

为什么在flask应用程序的初始化中使用tornado ioloop实例化时flask会挂起?

D.Ginzbourg • 4 年前 • 899 次点击  

我在试着设置我的 jaeger_client 我体内的示踪剂 Flask 应用程序 __init__ (来源于 )应用程序运行后一直挂着 from tornado.platform.epoll import EPollIOLoop 里面 ioloop.py 第243行( tornado==4.5.3 )

这是里面的原始代码片段 爱因斯坦 导致了绞刑:

tracer_config = Config(
config={
    'sampler': {'type': 'const', 'param': 1},
    'local_agent': {'reporting_host': '<SOME_IP>'},
    'logging': True
},
service_name='hello-world')
self.tracer = tracer_config.initialize_tracer()

我不明白为什么,最后把范围缩小到这段代码,它也挂起了:

from flask import Flask
from tornado import ioloop
from threading import Thread


def foo():
    return ioloop.IOLoop()


class A(Flask):
    def __init__(self):
        super(A, self).__init__(__name__)
        print("Initializing...")
        t = Thread(target=foo)
        t.start()
        t.join()
        print("Done initializing.")


app = A()

运行以下命令(假定脚本名为 test.py )将清楚地显示悬挂物:

#/bin/sh
FLASK_APP=test.py flask run

( Flask 1.0.2 )

知道是什么导致了绞刑吗?

解决方案 杰格客户 初始化问题

我最终用 的内置函数 self.before_first_request(self._init_jeager_tracer) 里面 爱因斯坦 以确保在任何请求进入之前初始化跟踪程序。在哪里? _init_jeager_tracer 是跟踪程序初始化函数。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40499
 
899 次点击