contextvarsContextVar 怎么使用
contextvars.ContextVar 是 Python 3.7 引入的一个新特性,用于在协程上下文中共享数据。使用 ContextVar 可以避免使用全局变量或者传递参数的麻烦。
ContextVar 可以通过 contextvars.create_task_local() 函数创建一个协程本地变量,它可以在协程上下文中共享,并且会自动清除。
下面是一个简单的例子:
import asyncio
import contextvars
# 创建协程本地变量
name_var = contextvars.ContextVar('name', default='World')
async def greet():
# 获取协程本地变量的值
name = name_var.get()
print(f'Hello, {name}!')
async def main():
# 设置协程本地变量的值
name_var.set('Alice')
await greet()
# 在另一个协程中也可以使用协程本地变量
asyncio.create_task(greet())
asyncio.run(main())
在上面的例子中,我们创建了一个名为 name 的协程本地变量,并将其默认值设置为 'World'。在 greet() 函数中,我们可以通过 name_var.get() 获取协程本地变量的值。在 main() 函数中,我们通过 name_var.set('Alice') 设置了协程本地变量的值,并在 greet() 函数中输出了 'Hello, Alice!'。我们还通过 asyncio.create_task(greet()) 创建了另一个协程,它也可以使用协程本地变量。
注意,协程本地变量只在协程上下文中共享,如果在不同的协程中使用同一个协程本地变量,它们的值是独立的。此外,协程本地变量只在协程内部有效,如果在协程外部使用它,会抛出异常
原文地址: https://www.cveoy.top/t/topic/clga 著作权归作者所有。请勿转载和采集!