vog*_*ier 5 python python-3.7 python-contextvars
我正在尝试使用新的 contextvars 库(https://docs.python.org/3/library/contextvars.html)来使某些值在异步上下文中跨模块可用,类似于跨模块的 ContextVars,并且想知道是否有一种方法可以通过名称或标识符从给定的执行上下文中获取上下文变量,而无需直接导入上下文变量。
理想情况下,我想做类似以下的事情:
from _contextvars import ContextVar
language = ContextVar('language')
language.set('en-US')
Run Code Online (Sandbox Code Playgroud)
在一个单独的模块中,该模块可以服务网络请求或根据设置的语言获取翻译:
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
Run Code Online (Sandbox Code Playgroud)
我意识到 contextvars 库的 API 在 ContextVar 对象和值之间有一个映射,而不是字符串到值之间的映射,因此无法完成此查找,但我发现需要做的有点from module_with_context_var import language混乱并且容易分散在代码库中而不是当前上下文的单个包装器,这看起来像 copy_context() 应该是的。
任何能够在中央位置构造上下文变量获取和设置的好方法的指针也适用于协同例程/异步编程,我们将不胜感激!