2012-04-22 401 views
9

在Python腳本中,我想爲某個函數調用設置內存限制。我看着how to limit heap size;但是,我不想限制整個運行的Python進程的內存 - 即在函數調用之前和之後設置內存限制。Python:爲特定函數調用設置內存限制

是否有任何方法可以使用給定的內存量進行函數調用,以便內存限制不會影響調用者?

+9

打開一個新進程並限制堆大小。 – JBernardo 2012-04-22 17:00:46

+2

或者,理論上你也可以檢查當前幀並遞歸地構建一棵樹,其中包含所有對象並估計所使用的內存,但這並不簡單。檢查像guppy.heapy這樣的內存分析器如何執行它。 – 2012-04-22 17:27:47

+5

但真正的問題是,你爲什麼想這樣做?這並沒有內建功能,所以你可能以錯誤的方式處理問題。 – 2012-04-22 17:28:07

回答

2

不,這是不可能的。 Python不會跟蹤哪些函數負責分配新內存,也不會跟蹤libc,因此無法僅通過一個函數來限制內存使用情況。

爲了做到這一點,你必須讓你使用分配內存中的新功能,需要它,如果該函數去到指定什麼Python的功能是負責的,所以它可以拒絕內存分配修改的Python其極限。如@JBernardo所說,唯一的另一種方法就是在有限內存的獨立進程中執行該功能。

至於實現沙箱,已經有相對經過測試的實現。有什麼理由不能使用它們嗎?特別參見PyPy的sandboxed VMZope sandbox