前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >48-R编程(十:多线程操作之snowfall)

48-R编程(十:多线程操作之snowfall)

作者头像
北野茶缸子
发布2021-12-17 09:11:19
8650
发布2021-12-17 09:11:19
举报
文章被收录于专栏:北野茶缸子的专栏

参考:https://blog.csdn.net/weixin_41929524/article/details/81742322

根据作者的表述,parallel 包存在不稳定的问题。另外,其创建的核心并行环境与主环境隔离,调用变量也并不方便。

snowfall 闪亮登场了,其思路和parallel 一样,使用起来都是分为三个主要步骤:初始化并行、操作并行、结束并行并返还内存。

代码语言:javascript
复制
> sfInit(parallel = TRUE, cpus = detectCores() - 1)
R Version:  R version 3.6.3 (2020-02-29) 

snowfall 1.84-6.1 initialized (using snow 0.4-3): parallel execution on 3 CPUs.
# 初始化


a<- matrix(1:10, ncol = 2)
sfApply(a, 1, max)

# 结束,返还内存
sfStop()

外部对象与变量:

代码语言:javascript
复制
sfLibrary(MASS)     # 载入依赖R包MASS
sfLibrary(ggplot2)  # 载入依赖R包ggplot2

sfExport("n", "m")         # 载入依赖的对象
sfExport("fun1", "fun2")   # 载入依赖的函数

不同于parallel,我们可以将所有并行语句中需要使用的对象和函数放在一个文件中,接着source 它一下,就可以加载了:

代码语言:javascript
复制
> sfSource('test.R')
Calling a snowfall function without calling 'sfInit' first or after sfStop().
'sfInit()' is called now.
snowfall 1.84-6.1 initialized: sequential execution, one CPU.


> x <- 3 

使用sfCat查看并行进度 这部分参考:https://stackoverflow.com/questions/8860470/how-to-output-a-message-in-snowfall

我们只需在函数中添加sfCat()函数,即可查看并行进度,其示例代码如下所示:

代码语言:javascript
复制
sfInit(parallel = TRUE, cpus = 2, slaveOutfile = "test.txt")
sfLibrary(snowfall)
res <- sfLapply(1:100, function(x) {
  sfCat(paste("Iteration ", x), sep = "\n")
})
sfStop()

需要注意的是,在初始化并行中,我们多加了一串命令:slaveOutfile = "test.txt",这个表示其显示的进度会储存在test.txt文件中,其余部分基本没什么变化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档