R эквивалентно Python os.getpid() для параллельной обработки

Я часто использую параллельную обработку как в python (многопроцессорная библиотека), так и в r (пакеты snow и т. Д.). Одна вещь, которую я нахожу чрезвычайно полезной в Python, - это возможность регистрировать прогресс отдельных экземпляров, используя уникальный идентификатор экземпляра, поэтому я могу отслеживать, например, правильное ли количество экземпляров запущено и работает правильно. Чтобы сделать это в Python, я просто использую os.getpid().

Есть ли подобная команда в r? Я искал, но не нашел.

Например, ниже приведен пример абстрактного параллельного кода в r, в котором я хотел бы, чтобы файл журнала экземпляра включал идентификатор экземпляра в имя файла журнала (строка 17), а также время начала процесса:

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 для деталей.

Другие вопросы по тегам