管道工端点中的模型 creation/loading

model creation/loading in plumber endpoint

我关注这个great post and this repo。这里的其余端点如下所示:

# build the model
source("make_model.R")

#* @get /predict_petal_length
get_predict_length <- function(petal_width){
  
  # convert the input to a number
  petal_width <- as.numeric(petal_width)
  
  #create the prediction data frame
  prediction_data <- data.frame(Petal.Width=petal_width)
  
  # create the prediction
  predict(model,prediction_data)
} 

和make_model.R像这样:

dataset <- iris

# create the model
model <- lm(Petal.Length ~ Petal.Width, data = dataset)

一切都很简单,而且工作正常。只是好奇每个 GET 请求是否会启动 make_model.R 的执行,或者这是否有点像 Singleton 设计模式?也就是说,make_model.R是不是只执行一次?谢谢

继续我的评论,source"(make_model.R") 只会 运行 一次。 结果将可用于所有提出的请求。这意味着您可以加载一次数据集或模型,这些将根据您的请求与环境共享。

来自the documentation

By default, when you create a new Plumber router (which happens implicitly when you call plumb() on a file), a new environment is created especially for this router. It is in this environment that all expressions will be evaluated and all endpoints invoked.