簡體   English   中英

如何在python進程中限制內存使用

[英]How to limit memory usage within a python process

我在具有16GB Ram和64位操作系統的Linux機器上運行Python 2.7。 我寫的一個python腳本可以將太多的數據加載到內存中,這會使機器速度降低到我甚至無法再殺死進程的程度。

雖然我可以通過調用來限制內存:

ulimit -v 12000000

在運行腳本之前的shell中,我想在腳本本身中包含一個限制選項。 在我看的每個地方, resource模塊被引用為具有與ulimit相同的功能。 但是打電話:

import resource
_, hard = resource.getrlimit(resource.RLIMIT_DATA)
resource.setrlimit(resource.RLIMIT_DATA, (12000, hard))

在我的腳本開頭做什么都沒有。 即使設置低至12000的值也從未使過程崩潰。 我嘗試使用RLIMIT_STACK ,結果相同。 奇怪的是,打電話:

import subprocess
subprocess.call('ulimit -v 12000', shell=True)

什么都不做。

我究竟做錯了什么? 我在網上找不到任何實際的用法示例。


編輯:對於任何好奇的人,使用subprocess.call不起作用,因為它創建了一個(驚喜,驚喜!)新進程,它獨立於當前python程序運行的進程。

resource.RLIMIT_VMEMulimit -v對應的資源。

RLIMIT_DATA 僅影響brk/sbrk系統調用,較新的內存管理器傾向於使用mmap

需要注意的第二件事是ulimit / setrlimit只影響當前進程及其未來的子進程。

關於AttributeError: 'module' object has no attribute 'RLIMIT_VMEM'消息: resource模塊docs提到了這種可能性:

此模塊不會嘗試屏蔽平台差異 - 在該平台上,此模塊將無法使用未為平台定義的符號。

根據bash ulimit連接到上述,它使用RLIMIT_AS如果RLIMIT_VMEM沒有定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM