2013-01-08 70 views
3

在我的程序結束時,CPython 3.2解釋器花費了將近2分鐘的時間進行垃圾回收。這是一個known issue退出Python解釋器而不運行垃圾回收

幸運的是,就我而言,我不需要做任何垃圾收集,直到程序結束。因此,我只需要找到一種方法在完成時退出程序,而不會給gc.collect()一個運行的機會。

在Windows上按'CTRL + C'似乎可以做到。我想我也可以找到python解釋器的進程ID,並使用OS調用來殺死它。

有沒有一種方法可以使用純Python(可能是異常或標準庫調用)實現相同的效果,希望平臺無關?

回答

6
import os 
os._exit(0) 

這是不鼓勵的,因爲析構函數可以執行一些有用的操作。如果你確定你不需要這些析構函數來運行,這應該起作用。

+0

這是完美的。使用這些東西時應該注意哪些類型的東西?我希望文件句柄和網絡連接仍然會被操作系統釋放,即使它們的析構函數不運行? – max

+2

@max:操作系統*應該*能夠清理系統資源。你可能想要更擔心的是應用程序。例如,如果您的應用程序試圖執行某種多步驟文件操作,並且在中間將其切斷,則文件可能不會處於一致狀態。 – icktoofay

+1

當您使用'_exit'時,使用'atexit'註冊的例程(無論是您或您使用的庫)都不會運行。 –