是否可以在管道工服务器的R中定期运行脚本?

3mpgtkmj  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(104)

我想运行一个R脚本,它每秒调用一个外部api服务器。
该R脚本根据接收到的数据生成 Dataframe 。
接下来,我想调用(导入)这个 Dataframe 每秒从Excel VBA。
为了做到这一点,我打算使用R中的管道工来托管一个本地服务器,该服务器具有可以由Excel VBA调用的 Dataframe 。
代码可以是这样的(所有与stockmarketdata相关的代码都是无关的,只有myvar是相关的):

library(plumber)
library(tidyquant)
library(dplyr)

#* @apiTitle Stock Market Data API
#* @apiDescription Example of how to setup a Plumber API with just a few lines of code

#* Provide Stock Market Returns
#* @param symbol Ticker symbol (e.g. 'googl' for Alphabet, 'amzn' for Amazon ...)
#* @param from start date for the time series in 'YYYY-MM-DD' format. If not provided the start date is today minus 1 month. 
#* @param to end date for the time series in 'YYYY-DD-DD' format. If not provided, the end date is today.
#* @get /return
#* @serializer json
financial_data <- function(symbol,from = today()-months(1),to = today()) {
  data <- myvar
  data 
}

我的问题是,Plumber只有在我调用@get /my_df时才会做出React。如果在调用后必须调用外部API服务器,则需要花费一些时间。如果此时已经调用了外部API服务器,则效率会更高。例如,每秒进行一次外部调用,并每秒从Excel VBA调用@get /my_df。
是否可以在Plumber服务器中运行这样的定期脚本?
多谢了!

42fyovps

42fyovps1#

我成功地在R中使用调度程序运行了一个额外的脚本,如下所示:

library(tcltk)

run <- function () { 
  .id <<- tcl("after", 1000, run) # after 1000 ms execute run() again
  cat(as.character(.id), "\n")   
  myvar <<- Sys.time()
}

run()

myvar保存到全局环境中,可以由Plumber函数读取(和返回)。
虽然我尝试每秒运行一次,并在Excel VBA中每秒读取一次,使用下面的函数,它在Excel中每3秒只更新一次。这似乎是由于Plumber服务器和Excel之间的连接。如果我用Chrome调用Pluber服务器,它每秒正确更新一次。

Sub test()

     my_http = "http://127.0.0.1:7206/return?symbol=goog"
     my_output = WorksheetFunction.WebService(my_http)
     Debug.Print my_output

End Sub

相关问题