0

我希望使用此 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=','))
    })
}
  • 是否会在启动时loadMyFancyModel被调用,初始化每个会话它自己的副本,然后将其重新用于它要处理的任何未来调用?Nmodel
  • 如果req比 大/复杂得多scoring_X,但提取 的scoring_X计算简单,那么在主线程中将其范围缩小是否有任何进程间通信好处,如上所示?或者未来的工人会话是否会req因为它在范围内而收到?
4

0 回答 0