[英]getting a value from a context by name
我想将上下文变量用于类似的目的,例如在这个问题和接受的答案中:Python 中的上下文变量
这对应于本例中的f3a()
:
import contextvars
user_id = contextvars.ContextVar("user_id_var")
def test():
user_id.set("SOME-DATA")
f2()
def f2():
f3a()
f3b()
def f3a():
print(user_id.get())
def f3b():
ctx = contextvars.copy_context()
for key, value in ctx.items():
if key.name == 'user_id_var':
print(value)
break
test()
然而 function 需要user_id
全局变量来获取值。 如果它在不同的模块中,则需要导入它。
我的想法是,如果 function 知道存在一个上下文并且它知道变量名,那应该就是它所需要的。 我写了f3b
,但正如你所见,我必须搜索所有变量,因为上下文变量不支持按名称查找。 实现了按变量查找,但如果我有变量,我可以直接从中获取值( f3a
案例)
恐怕我不明白为什么它是这样设计的。 为什么商定的名称不是关键? 如果在某种框架中设置了上下文,然后由应用程序代码使用,那么这两个函数将位于不同的模块中,没有公共模块全局变量。 我能找到的例子对我没有帮助。 有人可以解释上下文变量 API 背后的基本原理吗?
可以通过这种方式获取key user_id的值
user_id = contextvars.ContextVar("user_id_var")
ctx = contextvars.copy_context()
ctx[user_id]
# or
ctx.get(user_id)
我在官方文档中看到他们提到了一些可能与您的担忧有关的内容:
“当前值”的概念值得特别考虑:存在并同时执行的不同异步任务可能对同一个键有不同的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.