2017-04-01 95 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