如果我不重置 Python 的 ContextVars 会发生什么?

Rol*_*Rol 10 python python-contextvars

这是Python中的内存泄漏吗?

import contextvars

contextvar = contextvars.ContextVar('example')

while True:
   string = 'hello world'
   token = contextvar.set(string)
Run Code Online (Sandbox Code Playgroud)

contextvar 是一个随着你向它推送的次数越多而不断增长的堆栈吗?

如果我从不打电话怎么办contextvar.reset(token)

或者一切都通过引用计数来处理?

jsb*_*eno 9

“令牌”对象包含恢复值作为其自身的普通属性 ( .old_value)。无论内部表示如何,只要您保留对令牌的一个引用,旧值就会一直存在。

现在,如果每当“设置”一个新值时 ContextVar 对象就会堆栈对其值的引用,那么您可能需要担心 - 情况似乎并非如此:旧值保留在令牌本身中(并且通过创建我可以随意使用其中一个令牌列表来重置令牌创建时的值,无论顺序如何 - 因此,令牌所做的就是确保它只能与创建它的 ContextVar 一起使用)

(及时:@mkrieger1 的答案中的实验首先在这里,并为我提供了重要信息,以便能够进行自己的测试并断言令牌值保留在令牌内,而不是在上下文中)