打开您的conftest.py
并键入以下行:
import gc
# Like gc.disable() but overrides your dependencies that do
# gc.disable() and gc.enable()
gc.set_threshold(0)
根据项目规模和测试数量,在较小项目中,几个百分之几的速度在一个项目中,最高10%,并进行了30,000个测试。您的经验可能会有所不同。
我走下了Python GC兔子洞,这将有一个很长的故事,所以这里有一个简短的故事。
当参考计数达到零时,python中的大多数内存都会发布。在一些情况下,当您可能获得循环引用时,会有一个停止的垃圾收集器。但是,启动GC的触发条件是分配但未发布非原子类型的实例达到较小的阈值。由于合法的原因,当您将某些东西加载到内存中时,这会导致很多GC周期:您的Django QuerySet缓存,文件记录和收集单元测试以运行。
对于我的测试案例,第二代时,在pytest
运行测试时,第二代获得了400,000多个对象。从0代中到达那里需要一些时间,并且在集合算法的复杂性中增加了n
。
如果Instagram can run services without GC in production,我们的测试也可以。