Python的线程本地数据和ContextVar
似乎实现了相同的功能(而API略有不同),唯一的面向用户的区别是ContextVar
使用异步代码(coroutines和异步),而线程本地数据不工作。
这真的是唯一的实际区别吗?
这是否意味着任何针对运行时>= 3.7 (引入ContextVar
时)的代码最好使用ContextVar
everywhere线程-本地数据可能在过去使用过?还是有理由更喜欢线程本地数据?(除了您特别希望将状态与线程而不是上下文关联的场景。)
发布于 2021-09-02 07:00:28
主要的问题,IMO,是“稍微不同的API”实际上是巨大的差异,虽然thread.local是简单的使用,ContextVars是一个低水平的痛苦(*),难以掌握和冗长的替代。
除此之外,ContextVars似乎是该走的路。
我正在编写一些代码来包装ContextVars,这样它们就可以作为替代工具了,但是生产还没有准备好。
如果有人感兴趣,该项目现在暂停,缺乏一些完善(文档,等等)。对于已发布的包,但它在:https://github.com/jsbueno/extracontext/中具有完全的功能。
(*)好的“痛苦”可能太主观了,但我发誓会有这种感觉,但这可能是因为我目前没有一个“真实世界”用例需要它,而我使用的人工示例只是过于人工地掌握实际的用例。
https://stackoverflow.com/questions/68856006
复制相似问题