ℕʘʘ*_*ḆḽḘ 4 multithreading r multiprocessing purrr
我正在使用furrr它构建在future.
我有一个非常简单的问题。比如说,我有一个文件列表,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()
}
Run Code Online (Sandbox Code Playgroud)
所以我只是跑步
listfiles %>% furrr::future_map(., processing_func(.x))
这是可行的,但是尽管我gc()调用rm()了,RAM 仍然会被填满,直到会话崩溃。
这里的概念问题是什么?当我明确丢弃某些残留对象时,为什么它们会以某种方式保留在内存中?
谢谢!
您可以尝试使用callr未来计划,它可能不会那么占用内存。future.callr正如小插图中引用的那样
当使用调用方 future 时,每个 future 都会在一个新的后台 R 会话中解析,一旦收集到 future 的值,该会话就会结束。相比之下,多会话 future 在后台 R 工作会话中解决,这些会话在其生命周期内为多个 future 提供服务。对每个 future 使用新的 R 进程的优点是,可以保证 R 环境不会被以前的 future 污染,例如内存分配、终结器、修改的选项以及加载和附加的包。缺点是启动新的 R 进程会增加开销
library("future.callr")
plan(callr)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2310 次 |
| 最近记录: |