Я пытался настроить мой jaeger_client
трассировщик внутри моего Flask
приложения __init__
(полученного из Flask
), и приложение продолжало зависать после запуска from tornado.platform.epoll import EPollIOLoop
внутри ioloop.py
строки 243 (tornado==4.5.3
).
Это оригинальный фрагмент кода внутри __init__
, который вызвал зависание:
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
)
ЛюбойИдея, что вызывает зависание?
Решение проблемы инициализации jaeger_client
Я в конечном итоге использовал встроенную функцию Flask
self.before_first_request(self._init_jeager_tracer)
внутри __init__
чтобы убедиться, что трассировщик инициализируется до поступления любого запроса. Где _init_jeager_tracer
- функция инициализации трассировщика.