在 Linux 杀死来自 future_apply() 的期货
Kill futures from future_apply() on Linux
我使用 future_lapply()
在 Linux 机器上并行我的代码。如果我提前终止进程,只有一名工人被释放,并行进程继续存在。我知道我可以输入 tools::pskill(PID)
来结束每个单独的进程,但这很乏味,因为我在 26 个内核上输入 运行。
是否有办法从 R 对 linux 进行系统调用,以获取所有活动的 PID?
我这样设置future_lapply
:
# set number of workers
works <- 26
plan(multiprocess, workers = works)
future_lapply(datas, function(data) {
# do some long processes
}
如果我终止进程并且 运行 top
我仍然会看到:
因为我的并行 sessions 仍然是 运行ning。
更新 session 信息:
version.string R 版本 3.6.2 (2019-12-12)
未来 1.12.0
future.apply1.2.0
希望对您有所帮助。
require(future)
works <- 26
plan(multiprocess, workers = works)
future_lapply(datas, function(data) {
# do some long processes
})
# get all PIDs of the r processess
v <- listenv::listenv() # requires listenv package
for (ii in 1:works) {
v[[ii]] %<-% {
Sys.getpid()
}
}
for (i in 1:works) {
#For windows
system(sprintf("taskkill /F /PID %s", v[[i]]))
#For Linux
system(sprintf("kill -9 %s", v[[i]]))
}
祝你有美好的一天。
我使用 future_lapply()
在 Linux 机器上并行我的代码。如果我提前终止进程,只有一名工人被释放,并行进程继续存在。我知道我可以输入 tools::pskill(PID)
来结束每个单独的进程,但这很乏味,因为我在 26 个内核上输入 运行。
是否有办法从 R 对 linux 进行系统调用,以获取所有活动的 PID?
我这样设置future_lapply
:
# set number of workers
works <- 26
plan(multiprocess, workers = works)
future_lapply(datas, function(data) {
# do some long processes
}
如果我终止进程并且 运行 top
我仍然会看到:
因为我的并行 sessions 仍然是 运行ning。
更新 session 信息:
version.string R 版本 3.6.2 (2019-12-12)
未来 1.12.0
future.apply1.2.0
希望对您有所帮助。
require(future)
works <- 26
plan(multiprocess, workers = works)
future_lapply(datas, function(data) {
# do some long processes
})
# get all PIDs of the r processess
v <- listenv::listenv() # requires listenv package
for (ii in 1:works) {
v[[ii]] %<-% {
Sys.getpid()
}
}
for (i in 1:works) {
#For windows
system(sprintf("taskkill /F /PID %s", v[[i]]))
#For Linux
system(sprintf("kill -9 %s", v[[i]]))
}
祝你有美好的一天。