gpt4 book ai didi

python - rpy内存泄漏

转载 作者:太空狗 更新时间:2023-10-30 01:29:54 24 4
gpt4 key购买 nike

我的代码中有一小部分与此类似(当然使用实矩阵而不是零填充矩阵):

x = [rinterface.FloatSexpVector([0]*(1000**2)) for i in xrange(20)]
y = robjects.r('list')(x)

它看起来像是导致内存泄漏。

运行以下代码时:

for i in xrange(10):
x = [rinterface.FloatSexpVector([0]*(1000**2)) for i in xrange(20)]
y = robjects.r('list')(x)
del x
del y
robjects.r('gc(verbose=TRUE)')

我得到:

Error: cannot allocate vector of size 7.6 Mb
In addition: Warning messages:
1: Reached total allocation of 2047Mb: see help(memory.size)
2: Reached total allocation of 2047Mb: see help(memory.size)
3: Reached total allocation of 2047Mb: see help(memory.size)
4: Reached total allocation of 2047Mb: see help(memory.size)

这是一个错误还是我应该做些什么?我还尝试通过将变量放入 robjects.globalenv 中来命名变量,然后在 gc() 之前对它们进行 rm()-ing,但它似乎不起作用。

我应该提到我在 windows 上运行 rpy 2.3dev 但这种情况也发生在 rpy 2.2.6 的 linux 上(虽然因为 linux 运行 64 位版本而不是像 windows 机器那样的 32 位版本,内存只是增长而且我没有收到 2047mb 错误)

编辑:似乎在 R gc() 之前添加 gc.collect() 解决了第一个代码示例的问题,但这并没有解决我的问题 - 深入挖掘我的代码我发现导致问题的行是分配一个值进入 .names,与此类似:

x = [rinterface.FloatSexpVector([0]*(1000**2)) for i in xrange(20)]
y = robjects.r('list')(x)[0]
y.names = rinterface.StrSexpVector(['a']*len(y))

在清理之前放置 rinterface.NULL 也无济于事。有什么建议吗?

最佳答案

可能是因为 Python 不知道嵌入式 R 分配的内存量,因此不知道应该收集垃圾。

有一点关于memory usage in the documentation for rpy2 , 和一个 earlier question on SO

您的编辑表明可能发生了某些事情。最好的办法是在 rpy2 的 bitbucket 页面上提交错误报告,然后继续在那里而不是在这里进行故障排除。

关于python - rpy内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12277094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com