首页 > 解决方案 > 在 R 未来为管道工 API 重新使用持久会话变量

问题描述

我希望使用此 RStudio 视频中演示的 Plumber+Future 模式来构建一个 Plumber API,以充分利用多个可用内核。

在我的特殊情况下,有一些缓慢/昂贵的初始模型加载操作我想确保在会话/线程启动时最初发生,而不是根据请求按需重复。

正如我从多会话示例中了解到的那样,会话范围内的变量被复制,并且工作人员中的操作不会影响主线程(示例b可以rm(pid)并且pid变量仍然存在于主线程中)

...但是我不是 100% 清楚这些会话变量在未来之外的生命周期,例如pid:当每个 R 会话被创建然后重新用于每个未来时,它们是否会预先独立初始化?每次创建未来时,是否会从主线程发生一些内存复制?

具体来说,如果我有类似下面的NCPU/会话设置:

future::plan(multisession)

model <- loadMyFancyModel()

#' Model inference route
#' @post /invocations
function(req) {
    scoring_X <- [...]
    future::future({
        return(paste(predict(model, scoring_X, row.names=FALSE), collapse=','))
    })
}

标签: rplumberr-future

解决方案


推荐阅读