这是 Python 中的内存泄漏吗?
import contextvars
contextvar = contextvars.ContextVar('example')
while True:
string = 'hello world'
token = contextvar.set(string)
ContextVar是一个栈,随着越来越多的推送而不断增长吗?
如果我从未调用contextvar.reset(令牌)
怎么办?
还是所有内容都由引用计数处理?
这是 Python 中的内存泄漏吗?
import contextvars
contextvar = contextvars.ContextVar('example')
while True:
string = 'hello world'
token = contextvar.set(string)
ContextVar是一个栈,随着越来越多的推送而不断增长吗?
如果我从未调用contextvar.reset(令牌)
怎么办?
还是所有内容都由引用计数处理?
.old_value
)。无论内部表示如何,只要您保留对令牌的一个引用,旧值就会存在。
现在,如果ContextVar对象在每次“设置”新值时都堆叠引用,则可能需要担心-似乎并非如此:旧值保存在令牌本身中(通过创建令牌列表,我可以随意使用其中任何一个来重置令牌创建时的值,无论顺序如何-因此,令牌所做的就是确保它只能与创建它的ContextVar一起使用)
(时间上:@mkrieger1答案中的实验先到这里,并为我提供了重要信息,以便进行自己的测试并断言令牌值保存在令牌内部,而不是在上下文中)我让这个脚本运行了一段时间,内存消耗没有增加。
与这个脚本相比:
s = ''
while True:
s += 'hello world'
所以看起来不是内存泄漏。