2017-04-01 98 views
0

我有一个函数foo(),创建一个大名单(然后将其转换为大熊猫数据帧)垃圾回收太慢

当我火候,它运行有点慢,但合理的:

timeit.Timer('foo()', setup="from __main__ import foo").timeit(number=1) 
6.69 

但是,这不是我在执行过程中得到的时间,因为垃圾回收被禁用。它运行慢2倍,如果垃圾收集器启用:

timeit.Timer('foo()', setup="from __main__ import foo \ngc.enable()").timeit(number=1) 
20.31 

什么时候确定禁用垃圾收集器?我应该从foo()内部这样做吗?

回答

1

根据python文档you can disable the collector if you are sure your program does not create reference cycles.如果不希望执行foo期间自动GC发生。这是有道理的做这样的事情

def foo(): 
    gc.disable() 
    // Your logic 
    gc.enable() 

链接:https://docs.python.org/2/library/gc.html