在R(未来)中进行多处理时如何避免填满RAM?

编程入门 行业动态 更新时间:2024-10-25 18:34:56
本文介绍了在R(未来)中进行多处理时如何避免填满RAM?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我使用的是建立在future之上的furrr。

我有一个非常简单的问题。我有一个文件列表,比如说list('/mydata/file1.csv.gz', '/mydata/file1.csv.gz'),我正在与一个简单的函数并行处理它们,该函数加载数据,执行一些筛选操作,并将其写入磁盘。

本质上,我的函数是

processing_func <- function(file){ mydata <- readr::read_csv(file) mydata <- mydata %>% dplyr::filter(var == 1) data.table::fwrite(mydata, 'myfolder/processed.csv.gz') rm() gc() }

所以我只是运行

listfiles %>% furrr::future_map(., processing_func(.x))

这是可行的,但尽管我调用了gc()和rm(),RAM仍会一直填满,直到会话崩溃。

这里的概念问题是什么?为什么当我显式丢弃某些剩余对象时,它们会以某种方式保留在内存中?

谢谢!

推荐答案

您可以尝试使用callr未来计划,它可能会占用较少的内存。 引用自future.callr小节

当使用Callr期货时,每个未来都在一个新的后台R会话中解析,该会话在收集到未来的值后立即结束。相比之下,多会话期货是在后台R Worker会话中解决的,这些会话在其生命周期内服务于多个期货。对每个未来使用新的R进程的好处是,可以保证R环境不会受到以前的未来的污染,例如内存分配、终结器、修改的选项以及加载和附加的包。缺点是启动新的R进程会增加开销

library("future.callr") plan(callr)

更多推荐

在R(未来)中进行多处理时如何避免填满RAM?

本文发布于:2023-10-28 05:19:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1535641.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多处   未来   RAM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!