对PEP-567 ContextVars后台端口的异步支持。
aiocontextvars的Python项目详细描述
所有内容
重要:此包将在 contextvars asyncio backport已修复。在那之前,这个图书馆 实验性地为 contextvarsbackport库请阅读python 3.7contextvars documentation中的更多内容。
兼容性
在python 3.7中,这个包是100%contextvars。
在Python3.5和3.6中,这个包向PEP-567添加了异步支持 backport包也被命名为contextvars,其方式与 python 3.7contextvars实现:
- call_soon()和family方法。
python 3.7向call_soon()及其系列添加了关键字参数context。 方法。默认情况下,这些方法将复制(继承)当前上下文并 在该上下文中运行给定的方法。但是aiocontextvars不会碰 为了达到同样的效果,你需要:
loop.call_soon(copy_context().run, my_meth)
- 任务本地。
python 3.7在Task中使用了上面的关键字参数context,以确保 协同程序的每个步骤都在同一个上下文中运行 它的驾驶任务被创造出来了同时,aiocontextvars使用 Task.current_task()实现类似的效果:它破解异步和 在任务创建时将复制的上下文附加到任务,并替换线程 与当前任务实例本地共享上下文。这种行为完全相同 在大多数情况下是Python3.7你需要做的是导入 aiocontextvars在创建循环之前。
- 自定义任务和循环。
因为上面的hack是通过替换asyncio.get_event_loop和 loop.create_task,因此由自定义/私有API创建的任务和循环 无法按预期正确工作,例如uvloop.new_event_loop()或 asyncio.Task()。另外,在导入之前创建的事件循环 aiocontextvars也没有修补。所以总的来说,你应该导入 aiocontextvars在创建事件循环之前,始终使用 asyncio.*来操作循环/策略,并创建公共异步api 任务。
学分
范提克金是这个图书馆的作者和维护者。这个图书馆是开放的 BSD许可下的源软件。
历史记录
0.2.1(2018-10-24)
- 已更改为单模块布局
- 更新了自述文件。
0.2.0(2018-09-09)
这是一个突破性的变化。大多数实现被替换为 contextvars。在python 3.5和3.6中,aiocontextvars依赖于 contextvarspypi中的pep-567后台端口,并将其部分修补到 支持异步;在python 3.7中aiocontextvars只是 内置contextvars库。
- 修改了ContextVar.set()以返回令牌。
- 添加了ContextVar.reset(token)。
- 已删除ContextVar.delete()
- 删除了enable_inherit()和disable_inherit(),始终启用inherit。
- 添加了copy_context()和Context.run()。
- 删除了Context.current()和Context.inherited。
- 修正了set_event_loop(None)失败的问题(由j.j.jackson在10 11中贡献)
0.1.2(2018-04-04)
- 支持Python3.5。
0.1.1(2017-12-03)
- fixed setup.py
0.1.0(2017-12-03)
- pypi上的第一个版本。