我有一个测试脚本,可以启动多个线程,连接它们并检查进程使用的常驻内存:
from threading import Thread
import resource
def resident_memory() -> int:
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
def work():
a = 'Hello world'
a += '!!!'
def run_threads(count: int) -> None:
for _ in range(count):
t = Thread(target=work)
t.start()
t.join()
def run_workers(count: int) -> None:
for _ in range(count):
work()
while True:
print('Mem usage:', resident_memory())
run_threads(10000)
#run_workers(10000)
即使我加入线程,驻留内存似乎也在不断增长。 如果我在主线程中运行
work()
函数,则不会检测到内存泄漏。
我正在使用 python 3.5 进行测试。
这是一个已知问题吗?
我的代码中有同样的问题,搜索我发现问题是Python中的垃圾清理器,释放无用的内存由于某种原因没有检测到这些数据,另一种方法是这个函数可以一直工作使用子函数并将输出放入数组或类似的东西中。
在这些链接中提出一个“解决方案”