如何在不使用方法参数的情况下将异步方法调用的上下文传递给另一个?
我需要这个功能来使用一种流ID来丰富日志消息,这样我就可以轻松地跟踪特定呼叫方法流的所有日志消息。
我使用Python的异步和等待关键字(Python 3.5.x)。
答案 0 :(得分:1)
你应该使用Python 3.7中引入的Context Variables,我有一个Python的polyfill< 3.7为aiocontextvars。
上一个回答:
您可能需要查看tasklocals和aiolocals。
答案 1 :(得分:0)
我通过设置自定义task factory解决了这个问题。事实证明,每个任务的上下文(与每个异步调用的上下文相比)对我来说已经足够了。
答案 2 :(得分:0)
我正在研究aiotask-context package。这是在任务之间传递上下文的一种非常简单的方法(使用await
或yield from
调用)。如果你不想使用这个包,你仍然可以使用这个想法:)。
我正在研究如何为ensure_future
来电传播它。
答案 3 :(得分:0)
import contextvars
c_id = contextvars.ContextVar("context_id", default=None)
def get_context_id():
return c_id.get()
def set_context_id(value):
c_id.set(value)
我为此付出了很多努力。如果仍然有人在寻找答案,那么他们可以在这里参考。可以从Python3.7开始使用。