【发布时间】:2021-08-20 01:24:26
【问题描述】:
Python 的 thread-local data 和 ContextVars 似乎实现了相同的目标(虽然 API 略有不同),唯一面向用户的区别是 ContextVars 使用异步代码(协程和异步),而线程本地数据没有。
这真的是唯一实际的区别吗?
这是否意味着任何针对运行时 >= 3.7(引入 ContextVar 时)的代码最好在过去可能使用线程本地数据的任何地方使用 ContextVar?还是有理由更喜欢线程本地数据? (除了您特别想要将状态与线程而不是上下文相关联的场景。)
【问题讨论】:
-
可能会有所帮助,来自
contextvars docs的第二段“具有状态的上下文管理器应使用上下文变量而不是 threading.local() 以防止其状态意外地流向其他代码,在并发代码中使用时。"
标签: python multithreading python-contextvars