R 等效于 python 的 os.getpid() 用于并行处理

Posted

技术标签:

【中文标题】R 等效于 python 的 os.getpid() 用于并行处理【英文标题】:R equivalent to python's os.getpid() for parallel processing 【发布时间】:2015-12-28 21:36:37 【问题描述】:

我经常在 python(多处理库)和 r(snow 等包)下使用并行处理。 我发现在 python 中非常有用的一件事是能够使用实例的唯一标识符记录单个实例的进度,因此我可以跟踪,例如,是否启动了正确数量的实例并正常运行。 要在 python 中做到这一点,我只需使用 os.getpid()。

r中有类似的命令吗?我已经搜索但没有找到。

例如,下面是 r 中抽象并行代码的示例,我希望实例日志文件在日志文件名(第 17 行)中包含实例 ID,以及进程启动的时间:

rm(list = ls()) #remove all past worksheet variables
wd="D:/temp/" #location for log files
setwd(wd)
n_spp=30
spp_nmS=paste0("sp_",c(1:n_spp))
#sp_nm=spp_nmS[1]
library(snowfall)

#stop sinks
sink.reset <- function()
  for(i in seq_len(sink.number()))
    sink(NULL)
  


sp_parallel_run=function(sp_nm)
  file_nm=paste0(wd,sp_nm,"_log_",format(Sys.time(), "%a %b %d %H%M%S"), ".txt")
  con=file(file_nm, open="wt")
  sink(con)
  cat('\n', 'Started on ', date(), '\n') 
  ptm0 <- proc.time()

  #start code
  sp_nm
  Sys.sleep(10)

  #end code
  ptm1=proc.time() - ptm0
  jnk=as.numeric(ptm1[3])
  cat('\n','It took ', jnk, "seconds to model", sp_nm)

  sink.reset()
  close(con)


sfInit( parallel=TRUE, cpus=as.integer(Sys.getenv('NUMBER_OF_PROCESSORS'))) # 
sfExportAll()
sfLapply(x=spp_nmS, fun=sp_parallel_run)

sfRemoveAll()
sfStop()

【问题讨论】:

【参考方案1】:

??pid 在结果列表顶部附近返回base::Sys.getpid(取决于您安装的软件包)。

详情请见?Sys.getpid

【讨论】:

谢谢!那是完美的!没有找到它感到很愚蠢,但我没有想到 r 使用了相同的 pid 术语......

以上是关于R 等效于 python 的 os.getpid() 用于并行处理的主要内容,如果未能解决你的问题,请参考以下文章

是否有 R 等效于 python 的字符串“格式”函数?

Python3:多进程-小例子

python

Python多进程

python__系统 : 进程

python--(进程相关)