4

Python 的线程本地数据ContextVars 似乎实现了相同的事情(虽然 API 略有不同),唯一面向用户的区别是ContextVars 可以使用异步代码(协程和异步),而线程本地数据则不能。

这真的是唯一实际的区别吗?

这是否意味着任何针对运行时> = 3.7(何时ContextVar引入)的代码最好使用ContextVar过去可能使用过的线程本地数据?还是有理由更喜欢线程本地数据?(除了您特别希望将状态与线程而不是上下文相关联的情况。)

4

1 回答 1

0

IMO 的主要问题是“稍微不同的 API”实际上是巨大的差异,虽然 thread.local 易于使用,但 ContextVars 提供了一种低级的痛苦(*)、难以掌握和冗长的替代方案。

除此之外,ContextVars 似乎是要走的路。
我正在编写一些代码来包装 ContextVars,这样它们就可以成为替代品,但事情还没有准备好生产。

(*)好吧,“痛苦”可能太主观了,但我发誓感觉就是这样,但这可能是因为我目前没有需要它的“现实世界”用例,而且我使用的人工示例太人工了掌握实际用例。

于 2021-09-02T15:00:28.830 回答