繁体   English   中英

按名称从上下文中获取值

[英]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)

我在官方文档中看到他们提到了一些可能与您的担忧有关的内容:

“当前值”的概念值得特别考虑:存在并同时执行的不同异步任务可能对同一个键有不同的值

并使Context 对象可挑选

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM