【发布时间】:2019-08-06 11:09:07
【问题描述】:
仅供参考,我根据一些 cmets 添加了更多信息。
我创建了以下调用 API 的函数:
keyword_checker <- function(keyword, domain, loc, lang){
keyword_to_check <- as.character(keyword)
api_request <- paste("https://script.google.com/blabalbalba",
"?kw=",keyword,
"&domain=",domain,
"&loc=",loc,
"&lang=",lang,sep="")
api_request <- URLencode(api_request, repeated = TRUE)
source <-fromJSON(file = api_request)#Json file into Data Frame
return(data.frame(do.call("rbind", source$data$result))) ##in order to extract only the "results" data
我正在使用 R 包 foreach() 与 %dopar% 和 doSNOW 来执行许多 API 调用(超过 120k 调用)。
不幸的是,碰巧有一些errors(通常是超时连接),所以它使脚本停止。为了避免这个问题,我使用了.errorhandling = 'pass'。现在,脚本并没有停止,但我想知道是否有办法在我得到答案之前进行 API 调用?
这是我的脚本:
cl <- makeCluster(9)
registerDoSNOW(cl)
final_urls_checker <- foreach(i = 1:length(mes_urls_to_check), .combine=rbind, .errorhandling = 'pass', .packages='rjson') %dopar% {
test_keyword <- as.character(mes_urls_to_check[i])
results <- indexed_url(test_keyword)} ##name of my function
##Stop cluster
stopCluster(cl)
我基本上希望我的脚本继续运行(不停止整个过程),直到我从 API 调用中得到答案
我是否需要将TryCatch 函数合并到foreach 中,或者通过添加类似“如果API 没有给出答案,然后等到明白了吗?”
我希望这更清楚。
【问题讨论】:
-
可能是通过在
foreach循环内添加try catch块?
标签: r foreach error-handling parallel-processing