Gra*_*Lea 12 python multithreading python-contextvars
Python 的线程本地数据和ContextVar
s 似乎实现了相同的目标(虽然 API 略有不同),唯一面向用户的区别是 sContextVar
可以使用异步代码(协程和 asyncio),而线程本地数据则不能。
这真的是唯一的实际区别吗?
这是否意味着任何针对运行时 >= 3.7(ContextVar
引入时)的代码最好使用过去ContextVar
可能使用过的所有线程本地数据?或者是否有理由仍然偏爱线程本地数据?(除了您特别想要将状态与线程而不是上下文关联的情况。)
在我看来,主要问题是“稍微不同的 API”实际上是巨大的差异,虽然 thread.local 易于使用,但 ContextVars 提供了一个低级的痛苦(*)、难以掌握和冗长的替代方案。
除此之外,ContextVars 似乎是可行的方法。
我正在编写一些代码来包装 ContextVars,以便它们可以作为直接替代品,但它还没有准备好投入生产。
如果有人感兴趣,该项目现在已暂停,缺少对已发布包的一些改进(文档等...),但它功能齐全,位于: https: //github.com/jsbueno/extracontext/
(*) 好吧,“痛苦”可能太主观了,但我发誓感觉就是这样,但这可能是因为我目前没有需要它的“现实世界”用例,而且我使用的人工示例太人工了掌握实际用例。
归档时间: |
|
查看次数: |
2757 次 |
最近记录: |