簡體   English   中英

清除rpy2使用的內存

[英]Clearing memory used by rpy2

如何清除通過rpy創建的對象(以及它們占用的內存)?

import rpy2.robjects as r
a = r.r('a = matrix(NA, 2000000, 50)')
del a    #if I do this, there is no change in the amount of memory used
r.r('rm(list=(ls(all=TRUE)))') # Same here, the objects disappear, but the memory is still used

不幸的結果是,在我的應用程序中,內存使用量增加,直到沒有足夠的然后它崩潰...來自rpy2 文檔

對象本身仍然可用,並且在從Python中刪除foo之前保護其免受R的垃圾收集

但即使這樣做:

import rpy2.robjects as r
a = r.r('a = matrix(NA, 2000000, 50)')
r.r.rm('a')
del a
r.r.gc()

沒有釋放使用的內存......

編輯:rpy2 2.0,Win XP,R 2.12.0

rpy文檔中一段暗示您在刪除或覆蓋大對象時可能需要經常運行Python垃圾收集器:

R對象存在於R內存空間中,它們的大小不為Python所知,因此,當涉及大對象時,Python似乎並不總是經常進行垃圾收集。 當在循環中覆蓋大對象時,這有時會導致瞬態增加的內存使用量,雖然達到系統的內存限制似乎會觸發垃圾收集,但是人們可能希望明確地觸發收集。

我可以通過在創建矩陣后立即運行gc.collect()來強制rpy2釋放該大矩陣,並在刪除它並運行R的內部gc()函數之后再次執行。 在睡眠循環中運行它 - 使用top來觀察內存使用量的增加/減少。

在Ubuntu 10.0.4上使用Python 2.6運行,python-rpy版本2.0.8鏈接到R版本2.10.1。 希望這有助於您取得一些進展:

import gc
import time

import rpy2.robjects as R

for i in range(5):
    print 'pass %d' % i
    R.r('a = matrix(NA, 1000000, 50)')
    gc.collect()
    R.r('rm(a)')
    R.r('gc()')
    gc.collect()

    print 'sleeping..'
    time.sleep(5)

暫無
暫無

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

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