r - 在 R 未来为管道工 API 重新使用持久会话变量
问题描述
我希望使用此 RStudio 视频中演示的 Plumber+Future 模式来构建一个 Plumber API,以充分利用多个可用内核。
在我的特殊情况下,有一些缓慢/昂贵的初始模型加载操作我想确保在会话/线程启动时最初发生,而不是根据请求按需重复。
正如我从多会话示例中了解到的那样,会话范围内的变量将被复制,并且工作人员中的操作不会影响主线程(示例b
可以rm(pid)
并且pid
变量仍然存在于主线程中)
...但是我不是 100% 清楚这些会话变量在未来之外的生命周期,例如pid
:当每个 R 会话被创建然后重新用于每个未来时,它们是否会预先独立初始化?每次创建未来时,是否会从主线程发生一些内存复制?
具体来说,如果我有类似下面的N
CPU/会话设置:
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
被调用,初始化每个会话它自己的副本,然后将其重新用于它要处理的任何未来调用?N
model
- 如果
req
比 大/复杂得多scoring_X
,但提取 的scoring_X
计算简单,那么在主线程中将其范围缩小是否有任何进程间通信好处,如上所示?或者未来的工人会话是否会req
因为它在范围内而收到?
解决方案
推荐阅读
- html - 无法提交带有元素的 Django 表单
- python - 输出为 100 但我不明白为什么
- swift - 如何从Sqlite数据库加载表视图中的数据,UISwitch的状态是根据数据库中的保存状态
- android - 将图像从 imageview 上传到服务器
- ssis - SSIS 电源查询源 -> 连接管理器说明
- c - 在 C/C++ 中使用交错数据格式对复向量乘法进行向量化
- r - 在 highcharter R 图中设置字体
- linux - 我可以限制我的服务以 root 身份运行吗?
- javascript - 如何在 CKEditor 5 中禁用或删除填充?
- flutter - 如何根据背景更改文本颜色,以使两种颜色之间形成良好的对比