R闪亮异步编程使用GET功能

问题描述 投票:1回答:1

我的R安装和软件包的详细信息是:OS macOS R v3.5.1 Future Package - !这不适用于我系统上安装的R版本

我试图使用API​​调用函数(HTTR:GET)获取json数据。任务是有多个端点,从中可以在R上提取数据以进行数据处理并最终创建Shiny App。

手头的问题是:当前的未来套餐不适用于R3.5.1。我的行动步骤应该是什么?

你能确认我的代码是否正确:XYZ < - promise(GET(url,timeout(120)))

第三,如果多个端点必须是异步编程的一部分,我应该如何开发脚本。一个小例子将有所帮助并提供方向。

先感谢您。

r asynchronous shiny promise httr
1个回答
1
投票

我不知道3.5.1问题但是这里是你如何使用futurepromises启动异步编程的任务

library(promises)
library(future)
library(httr)

plan(multisession)


future(GET("http://slowwly.robertomurray.co.uk/delay/10000/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)
future(GET("http://slowwly.robertomurray.co.uk/delay/10/url/http://www.google.co.uk"))%...>%print(.)

这是一个用模拟延迟查询虚拟api的例子。

plan()为该计划的其余部分制定了战略。这里设置为multisession,它启动一个单独的R会话来执行程序。其他常用的计划是multicore(在mac或linux上,因为fork)或multiprocess。你可以用?plan了解更多关于它们的信息

特殊的%...>%运算符是一些语法糖,它基本上告诉程序只有在promise被解决后才打印结果。然后,控件返回到父进程。

根据您的表示法,您也可以在没有promisses包的情况下执行此操作。

a = future(GET("http://slowwly.robertomurray.co.uk/delay/10000/url/http://www.google.co.uk"))
value(a)

这里API调用的结果仅在完成时返回。直到value()被称为父母有控制权来执行其他任务。

以下是所有这些电话的最佳参考:

  1. https://rstudio.github.io/promises/articles/futures.html
  2. https://cran.r-project.org/web/packages/future/vignettes/future-1-overview.html
© www.soinside.com 2019 - 2024. All rights reserved.