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



这是Python中的内存泄漏吗?

import contextvars
contextvar = contextvars.ContextVar('example')
while True:
string = 'hello world'
token = contextvar.set(string)

contextvar是一个堆栈吗?你越往上推,它就会不断增长?

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

还是所有的事情都是通过引用计数来处理的?

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

现在,如果ContextVar对象将在新值为"0"时堆叠对其值的引用;设置";您可能需要担心-事实并非如此:旧值保留在令牌本身中(通过创建令牌列表,我可以随意使用其中的一个来重置令牌创建时的值,而不考虑顺序-因此,令牌所做的只是确保它只能与创建它的ContextVar一起使用(

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

我让这个脚本运行了一段时间,内存消耗没有增加。

与此脚本相反:

s = ''
while True:
s += 'hello world'

因此,这似乎不是内存泄漏。

相关内容

  • 没有找到相关文章

最新更新