我正在尝试使用新的contextvars库(https://docs.python.org/3/library/contextvars.html)使某些值在异步上下文中的各个模块中可用,类似于ContextVars across modules,并且想知道是否有一种获取方法在给定的执行上下文中按名称或标识符分类上下文变量,而无需直接导入上下文变量。
理想情况下,我想执行以下操作:
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()的样子。
任何以一种很好的方式来构造上下文变量并在中央位置进行设置并与协同例程/异步编程一起使用的指针都将受到赞赏!