使用R

时间:2018-02-12 10:37:28

标签: r curl

我正在编写一些代码,我从Web API下载了许多页面,进行了一些处理,并将它们组合成一个数据框。 API需要大约30秒来响应每个请求,因此在对当前页面进行处理时发送下一页的请求会很方便。我可以使用例如mcparallel这样做,但这似乎有点矫枉过正。 curl包声称它可以进行非阻塞连接,但这对我来说似乎不起作用。

来自vignette("intro", "curl")

  

从版本2.3开始,也可以打开连接   非阻塞模式。在这种情况下,readBin和readLines将返回   立即获得可用而无需等待的数据。对于   我们使用的非阻塞连接isIncomplete来检查是否下载   已经完成了。

con <- curl("https://httpbin.org/drip?duration=1&numbytes=50")
open(con, "rb", blocking = FALSE) 
while(isIncomplete(con)){  
 buf <- readBin(con, raw(), 1024)
 if(length(buf)) 
  cat("received: ", rawToChar(buf), "\n")
}
close(con)

预期的结果是open应立即返回,然后在结果出来时,应在1秒内逐步打印50个星号。对我来说,open阻塞大约一秒,然后一次打印出星号。

我还需要做些什么吗?这对其他人有用吗?

我在Ubuntu 16.04 LTS上使用R版本3.3.2,curl包版本3.1和libcurl3版本7.47.0。我已经在RStudio和命令行R控制台上尝试过,结果相同。

0 个答案:

没有答案