2015-12-24 69 views
3

我有這引起了內存泄漏執行時一個python方法,本身在一個C庫發起與Python綁定我無法控制的泄漏:產卵過程是一種處理python內存泄漏的好方法嗎?

for i in range(10): 
    do_some_c_stuff() # Memory leaks at every invocation, not freed by garbage collector 

我發現,如果我生成一個進程和然後終止它的內存被釋放:

for i in range(10): 
    p = multiprocessing.Process(target=do_some_c_stuff) 
    p.start() 
    p.join() 
    p.terminate() # Memory is freed up here, (by the OS?) 

我的問題是 - 這是一個不錯的方式來處理這個問題,或者是有更好的東西我可以做什麼?

+1

在功能上它確實聽起來像一個很好的解決方案(我假設你知道它爲什麼起作用)。要清楚的是操作的預期性能和/或頻率,因爲產卵過程不完全是免費和輕便的午餐。 – Pynchia

+1

感謝Pynchia,我對應用程序進行了基準測試,不管這個過程是否有產卵技巧,它看起來都具有相同的性能 - 函數的執行時間遠遠超過產生過程的邊際成本。現在我會堅持使用這個解決方案,並最終研究解決C級的這個問題。 –

回答

0

我的問題是 - 這是一個不錯的方式來處理這個問題

我不這麼認爲。產生一個過程是一個代價高昂的操作,每當你需要調用這個函數時,這樣做可能會變得非常昂貴。

還是有什麼更好的,我可以做?

是:軟件的作者聯繫,並要求修復它:)

如果這是不可能的,我將開始尋找一種替代。但是使用軟件,知道它泄漏,應該隨時避免。