【发布时间】:2017-06-06 13:50:17
【问题描述】:
我正在为一个复杂的项目运行一个大型单元测试存储库。 这个项目有一些东西不能很好地处理大量的测试:
- 导致对象在测试之间不被释放的缓存(记忆)
- 模块级别的复杂对象是单例并且在使用时可能会收集数据
我对每个测试(或至少每个测试套件)都有自己的“python-object-pool”并能够在之后释放它感兴趣。
某种 python-garbage-collector-problem 解决方法。
我想象一个 python 独立的临时和可丢弃的解释器,它可以为我运行某些代码,并且在我可以调用“interpreter.free()”并确保它不会泄漏之后。
我发现一个艰难的解决方案是每次我需要一个可以运行测试的消耗性解释器时使用 Nose 或通过子进程实现它。所以每个测试都变成了“fork_and_run(conditions)”,并且在原始进程中不泄漏任何内存。
还看到每个测试的 Nose 单个进程并按顺序运行测试 - 尽管人们提到它有时会在中途冻结 - 不那么有趣..
有没有更简单的解决方案?
附: 我对浏览大量其他人的代码并试图使他们所有的缓存/对象/项目成为可以清理的完美内存管理对象不感兴趣。
P.P.S 我们的 PROD 代码还为每项工作创建了一个新流程,这非常舒适,因为我们不必纠结于“永远生存”和其他可怕的故事。
【问题讨论】:
标签: python unit-testing memory-management garbage-collection virtualization