在文档中我没有找到任何关于update
的内容。
我需要有以下原子:
context_metadata = contextvars.ContextVar("context_logger_metadata")
my_dict = context_metadata.get()
my_dict['appended'] = 'some_data'
context_metadata.set(my_dict)
python提供类似同步块的东西吗?我如何确保GIL不会在get和set之间切换上下文?
如注释所述:在异步程序中,上下文切换只在开发人员控制下的显式点发生:调用没有await
,没有上下文切换。在示例代码中,您的"读取"、"更改"、"设置"顺序将不中断地进行。
我希望你记住上下文变量在获取或设置它们的内容时不会复制对象:也就是说,你用get
检索的字典是与context_var值相同的对象:当你更新其中的键时,没有必要将值设置回上下文变量:字典已经更新了。
如果你的代码使用线程,或者将线程与异步代码结合,那么,在原子操作周围使用传统的threading.Lock
将会工作。