我有一个烧瓶服务,我想为所有日志消息记录一个correlationID。我发现this blog post使用了threading.local()
。
我的Flask服务使用gunicorn和gevent:
gunicorn --worker-class=gevent \
--worker-connections=1000 \
--bind 0.0.0.0:5000 myapp.app:app
--workers=4 --timeout 120 --keep-alive 120
threading.local()
可以用于请求吗?
我猜...
但是当我启动另一个线程时,我需要显式地传递correlationId,对吧?
(如果重要的话:我使用Python 3.7)
答案 0 :(得分:0)
如果您要问是否可以使用线程局部变量来传递请求对象,那是flask在内部所做的事情。
# context locals
_request_ctx_stack = LocalStack()
_app_ctx_stack = LocalStack()
current_app = LocalProxy(_find_app)
request = LocalProxy(partial(_lookup_req_object, 'request')) # Here
session = LocalProxy(partial(_lookup_req_object, 'session'))
g = LocalProxy(partial(_lookup_app_object, 'g'))
如果您要问是否可以从线程本地变量中传递您自己的对象,那么您也可以这样做,因为这基本上是flask的工作。
但是很明显,烧瓶建议使用werkzeug.local