R 多线程跑任务

您所在的位置:网站首页 linux运行r R 多线程跑任务

R 多线程跑任务

2023-08-25 22:42| 来源: 网络整理| 查看: 265

使用的R包 library(parallel),实现多线程操作。多线程即将任务分配到多个核中,能够缩减运行时间。 parallel包主要是针对apply家族的多线程。

> cl.cores cl clusterExport(cl, c('变量1', '变量2')) #输入变量或者function > clusterEvalQ(cl,{library(tibble) library(ggplot2) }) #加载包,这里需要对后续多核运行的脚本中需要的用到的包重新加载 stopCluster() 关闭集群

虽然在脚本最开始的时候,已经加载了这些R包了,但是由于利用多线程的脚本中还是得利用函数 clusterEvalQ() 重新加载一次,不然就会报错,例如 “%>% function 找不到”。

多线程运行的函数 最常用的parLapply() 是 lapply()函数的并行版本

Usage clusterCall(cl = NULL, fun, ...) clusterApply(cl = NULL, x, fun, ...) clusterApplyLB(cl = NULL, x, fun, ...) clusterEvalQ(cl = NULL, expr) clusterExport(cl = NULL, varlist, envir = .GlobalEnv) clusterMap(cl = NULL, fun, ..., MoreArgs = NULL, RECYCLE = TRUE, SIMPLIFY = FALSE, USE.NAMES = TRUE, .scheduling = c("static", "dynamic")) clusterSplit(cl = NULL, seq) parLapply(cl = NULL, X, fun, ..., chunk.size = NULL) parSapply(cl = NULL, X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE, chunk.size = NULL) parApply(cl = NULL, X, MARGIN, FUN, ..., chunk.size = NULL) parRapply(cl = NULL, x, FUN, ..., chunk.size = NULL) parCapply(cl = NULL, x, FUN, ..., chunk.size = NULL) parLapplyLB(cl = NULL, X, fun, ..., chunk.size = NULL) parSapplyLB(cl = NULL, X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE, chunk.size = NULL)

举个栗子:

> library(tidyverse) -- Attaching packages ------------------------------------------------------ tidyverse 1.3.0 -- √ ggplot2 3.3.3 √ purrr 0.3.4 √ tibble 3.0.5 √ dplyr 1.0.3 √ tidyr 1.1.2 √ stringr 1.4.0 √ readr 1.4.0 √ forcats 0.5.1 -- Conflicts --------------------------------------------------------- tidyverse_conflicts() -- x dplyr::filter() masks stats::filter() x dplyr::lag() masks stats::lag() > library(parellel) > cl list1 = c(1,2,3,6,7,9) %>% list(); list1 [[1]] [1] 1 2 3 6 7 9 > list2 = c(1,5,3,6,8,8) %>% list(); list2 [[1]] [1] 1 5 3 6 8 8 > list_example = c(list1,list2) ; list_example [[1]] [1] 1 2 3 6 7 9 [[2]] [1] 1 5 3 6 8 8 > a = parLapply(cl,list_example, function(x){ x = x+1 }) > a [[1]] [1] 2 3 4 7 8 10 [[2]] [1] 2 6 4 7 9 9 > stopCluster(cl)

以下的内容是网络上粘贴的,但是忘记出处,如有侵权,请与我联系。 常用函数 makeCluster、clusterExport、clusterEvalQ、clusterApply、parLapply、parSapply、parApply

detectCores() 检查当前的可用核数 clusterExport() 配置当前环境 makeCluster() 分配核数 stopCluster() 关闭集群 parLapply() lapply()函数的并行版本

makeCluster(spec, type, ...)用于创建并行集合。参数spec可以理解为线程数,或并行计算“打开R控制台”的数量;参数type默认值为"PSOCK",是一种组织并行计算的底层结构,这个参数还可以选"FORK"。

clusterEvalQ(cl = NULL, expr)用于在各线程中运行一些表达式,通常是用于加载各种包。参数cl表示要调用的并行集合(即makeCluster函数的运行结果);参数expr表示表达式。

clusterExport(cl = NULL, varlist, envir = .GlobalEnv) 用于 导入需要的变量。参数cl表示要调用的并行集合(即makeCluster函数的运行结果);参数varlist表示要导入的变量名称集合,相当于打开多个R控制台后在每个控制台中导入这些变量;参数envir,表示上述变量的来源,默认值.GlobalEnv表示变量从当前全局环境中导入。

clusterEvalQ(cl = NULL, expr)用于在各线程中运行一些表达式,通常是用于加载各种包。参数cl表示要调用的并行集合(即makeCluster函数的运行结果);参数expr表示表达式

PS: 针对for循环的并行运算的包foreach, mclapply()用法参考。 https://zhuanlan.zhihu.com/p/24547984



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3