首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过早停止正在运行的job并行作业

过早停止正在运行的job并行作业
EN

Stack Overflow用户
提问于 2015-02-06 18:17:52
回答 2查看 365关注 0票数 2

我有三项任务:

  1. 磁盘I/O绑定吗?
  2. 网络I/O受限吗?
  3. 是否将CPU绑定在远程计算机上?

3的结果会告诉我,我想要的答案是来自任务1还是任务2。由于每个任务都需要单独的资源,所以我想用me并行启动所有三个任务,然后等待第三个任务的结果,然后决定是终止任务1还是任务2。然而,我无法确定如何在R中过早地取消mc并行任务。如果没有,是否有更好的方法来取消不必要的计算?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-06 23:15:35

我不认为parallel包支持一种正式的方式来扼杀通过mcparallel启动的进程,但我的猜测是这样做是安全的,您可以使用来自tools包的pskill函数来完成它。下面是一个例子:

代码语言:javascript
复制
library(parallel)
library(tools)

fun1 <- function() {Sys.sleep(20); 1}
fun2 <- function() {Sys.sleep(20); 2}
fun3 <- function() {Sys.sleep(5); sample(2, 1)}
f1 <- mcparallel(fun1())
f2 <- mcparallel(fun2())
f3 <- mcparallel(fun3())
r <- mccollect(f3)
if (r[[1]] == 1) {
  cat('killing fun1...\n')
  pskill(f1$pid)
  print(mccollect(f1))
  r <- mccollect(f2)
} else {
  cat('killing fun2...\n')
  pskill(f2$pid)
  print(mccollect(f2))
  r <- mccollect(f1)
}
print(r)

在多线程应用程序中随机终止线程通常是危险的,因为它们可能持有某种类型的共享锁,但这些当然是进程,主进程似乎处理得很好。

票数 6
EN

Stack Overflow用户

发布于 2021-08-16 07:53:32

当前版本的并行::mccollect()支持wait参数。

只需传递FALSE,就可以过早退出任何正在运行的作业。

代码语言:javascript
复制
> mccollect(wait = FALSE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28372230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档