我正在尝试使用新的 contextvars 库(https://docs.python.org/3/library/contextvars.html)在异步上下文中跨模块提供某些值,类似于跨模块的 ContextVars,并且想知道如果有一种方法可以通过名称或标识符从给定的执行上下文中获取上下文变量,而无需直接导入上下文变量。
理想情况下,我想做以下事情:
from _contextvars import ContextVar
language = ContextVar('language')
language.set('en-US')
在一个单独的模块中,它可以根据设置的语言提供 Web 请求或获取翻译:
from _contextvars import copy_context
ctx = copy_context()
if 'language' in ctx:
lang_context_var = ctx.get('language') # get the context variable
lang_value = lang_context_var.get() # get the value
我意识到 contextvars 库的 API 具有 ContextVar 对象和值之间的映射,而不是字符串到值之间的映射,因此无法完成此查找,但我发现需要做from module_with_context_var import language
一些混乱并且容易在代码库中传播而不是当前上下文的单个包装器,这似乎是 copy_context() 应该是的。
任何以良好方式构造上下文变量获取和设置在中央位置的指针,它也适用于协同例程/异步编程,将不胜感激!