我对asyncio和ContextVars
完全不熟悉,我刚刚阅读了3.7中的新内容,发现了{thread.local
应该使用ContextVars
。但是没有一个官方文件和谷歌搜索结果能帮助我真正理解它的目的。在
那么,convertextVar是跨模块共享的吗?我试过了:
在示例.py在
from contextvars import ContextVar
number = ContextVar('number', default=100)
number.set(1)
然后我尝试导入数字.py在
^{pr2}$我原以为number.get()
会返回1,但显然我理解它的目的是错误的。在
有人能帮我理解一下吗?在
您正在重新指派
number
的值。直接从模块调用变量,例如example.number.get()
。在一个简单的应用程序正在替换一个全局变量。在
给定
编码
在这里我们将模拟随机行走。与全局变量一样,我们可以在函数之间共享状态:
^{pr2}$演示
ContextVar
充当由随机事件更新的全局变量:除了常规的全局变量,
ContextVar
:你又给这个数字赋值了。这就是为什么它显示200个最新更新。在
假设您的用例是使用python
thread.local
将线程全局变量存储在多线程应用程序中。在例如,您将django
request
全局存储在thread.local
中request
实例不,想象一下,在asyncio中,HTTP请求作为在同一python线程中执行的非阻塞代码来处理。在
thread.local
中的HTTP请求不起作用,因为多个并发请求在同一个python线程中被处理thread.local
变量,所有代码都可以访问最新的(不正确的)request
实例在本例中,您将使用
ContextVars
,它被设计成在同一个python线程中运行的非阻塞并发作业中用于此用例。在相关问题 更多 >
编程相关推荐