在R中的特定时间暂停特定时间的循环



我必须运行一个长循环,该循环更新一些数据并将其存储在我公司的服务器中。问题是该公司在午夜运行备用例程,为此,他们关闭了服务器约15分钟。

所以,鉴于我必须为每次迭代写下一个文件,当服务器掉下时,它会打破循环。

我设法通过编写循环如下

来解决问题
for(i in bills.list){
  url = paste0("ulalah",i,"/")
  # Download the data
  bill.result <- try(getURL(url)) # if there is an error try again
  while(class(bill.result)=="try-error"){
    Sys.sleep(1)
    bill.result <- try(getURL(url))
  }
# if iteration is between 23:59:00 and 23:59:40 wait 17 min to restart the loop
  if(as.numeric(format(Sys.time(), "%H%M%S")) > 235900 &
     as.numeric(format(Sys.time(), "%H%M%S")) < 235940){
    Sys.sleep(1020)
  }
  # Write the page to local hard drive
  write(bill.result, paste0("bill", i, ".txt"))
  # Print progress of download
  cat(i, "n")
}

问题是,通过在所有迭代中评估时间,我会失去一些宝贵的时间。更有效的想法?

我认为您可以简单地尝试存储日期。如果失败,可能是您在备份窗口

store <- function(data, retry = 10) {
  while(retry > 0) {
    result <- try(write(data, "/some_broken_place"))
    if(class(result) == "try-error") {
      # it might be we are in the backup window 
      cat("I will sleep if it turns out that it's backup time")
      if(as.numeric(format(Sys.time(), "%H%M%S")) > 235900 &
         as.numeric(format(Sys.time(), "%H%M%S")) < 235940){
        Sys.sleep(1020)
      }
      retry <- retry - 1
    }
  }
  if(retry == 0) {
    cat("Very, very bad situation - no chance to store data")
  }
}

最新更新