问题标签 [python-contextvars]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
176 浏览

python - 是否有任何理由使用 Python threading.local() 而不是 ContextVar(在 >= 3.7 中)

Python 的线程本地数据ContextVars 似乎实现了相同的事情(虽然 API 略有不同),唯一面向用户的区别是ContextVars 可以使用异步代码(协程和异步),而线程本地数据则不能。

这真的是唯一实际的区别吗?

这是否意味着任何针对运行时> = 3.7(何时ContextVar引入)的代码最好使用ContextVar过去可能使用过的线程本地数据?还是有理由更喜欢线程本地数据?(除了您特别希望将状态与线程而不是上下文相关联的情况。)

0 投票
1 回答
56 浏览

python - contextvars:获取和设置原子

文档中,我没有找到任何关于 contextvars的信息update

我需要以原子方式进行以下操作:

python是否提供类似同步块的东西?我如何确定 GIL 不会在 get 和 set 之间切换上下文?

0 投票
1 回答
24 浏览

python - 当 asyncio 处于“while”周期时,我如何处理上下文变量?

Contextvar 'value' 在经历 'while' 循环时不会改变。

'''

输出是 '---' 。我想为此上下文 var 设置一个新值,但我找不到任何类似的情况

第一次在这里所以我不知道是否所有图像都显示正确并且不知道在这里粘贴代码所以请帮忙

0 投票
1 回答
82 浏览

python - 使用 contextvar 跟踪 Python 中的异步循环

我正在尝试在 Python 中使用一个简单的异步示例,主要遵循这里的出色答案

我的目标是设置一个上下文变量,并通过不断附加来跟踪一系列调用。我知道可以使用该方法访问上下文变量,并且可以使用该.get()方法更改它们的值.set()sum()然而,在以下情况下,尽管从控制台可以明显看出对函数的一系列调用,但变量不会被修改。

编辑: 根据下面 Michael Butscher 的评论,我用 list: 替换了原始的上下文变量(它是一个字符串),output_list并使用.append(). 现在,这确实使我能够查看最终输出,但不能查看各个sum()方法中的中间输出。

完整代码:

如何迭代地跟随上下文变量列表的扩展output_list

我想要的控制台输出是:

相反,我得到:

0 投票
1 回答
21 浏览

python - 无法访问装饰器中的 contextVariables

我有 python 装饰器,我需要在装饰器中传递 contextVariable 或作为函数 request_id中的参数

第 1 步:声明 contextVariables 和方法

第 2 步:我在中间件中声明的上下文变量(使用 FastApi)

Step3:我尝试将 contextVariable 传递给装饰器 - 它总是 None 尝试在函数本身中作为参数传递 - 它总是 None

这是什么问题?

为什么 contextVars 只能在函数体中访问,不能在装饰器或参数函数中访问?

是否有任何解决方案可以在函数体之前访问 contextVar?

装饰师:

0 投票
1 回答
48 浏览

python - dict上的Python contextvars

我需要将字典作为上下文变量提供。我试图使用@property setter,但不明白在这种情况下如何正确设置键/值。

我有 websockets 服务器,我需要让每个客户端的字典变量都是唯一的。当然,每次我需要更改 dict 时,我都可以使用 contextvar 的getset方法,即

但这看起来不是一个好方法

因此,我正在尝试找到正确的方法来了解如何将 contextvar 与 dict 一起使用,或者如何使 dict 对于异步任务上下文是唯一的(websockets 服务器是异步的)