gevent.contextvars
-- Cooperative contextvars
#
合作社 contextvars
模块。
这个模块被添加到python3.7中。gevent版本可用于所有受支持的Python版本。但是,请参见有关gevent 20.9的重要说明。
上下文变量就像greenlet局部变量,只是使用起来更不方便。它们被设计来克服 asyncio
基于greenlet的代码很少需要。
主要区别在于,可以获取给定greenlet中所有上下文变量状态的快照,然后恢复以供执行;对上下文变量的修改“范围”取决于特定上下文处于活动状态的持续时间。(这种状态恢复支持对greenlet很少有用,因为它不是总是在一个线程中按顺序运行“任务”,比如 asyncio
是的,基于greenlet的代码通常生成新的greenlet来处理每个任务。)
gevent实现基于 PEP 567 也没有太多的优化。尤其是,设置上下文值不是固定时间。
在 1.5a3 版本加入.
在 20.9.0 版本发生变更: 在python3.7及更高版本上,这个模块不再是monkey补丁来代替标准库版本。gevent依赖于greenlet 0.4.17,其中包括对上下文变量的支持。这意味着任意数量的greenlet可以运行任意数量的异步任务,每个任务都有自己的上下文变量。此模块只支持greenlet,不支持asyncio任务,因此不建议在python3.7及更高版本上使用它。
在Python的早期版本中,这个模块仍然是一个用于后端口代码的解决方案。如果您希望以严格的greenlet本地方式使用contextvar API,也可以使用它。