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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录