gpt4 book ai didi

用于 node.js 并行处理的 R plumber 包

转载 作者:搜寻专家 更新时间:2023-10-31 23:46:38 26 4
gpt4 key购买 nike

我想使用 plumber 包来执行一些灵活的并行处理,并希望它能在 node.js 框架中工作,这样它就不会阻塞...

我有以下管道工文件。

# myfile.R

#* @get /mean
normalMean <- function(samples=10){
Sys.sleep(5)
data <- rnorm(samples)
mean(data)
}

我还按照此处的建议安装了 pm2 http://plumber.trestletech.com/docs/hosting/

我也制作了相同的run-myfile.sh 文件即

#!/bin/bash
R -e "library(plumber); pr <- plumb('myfile.R'); pr\$run(port=4000)"

并按照建议使其可执行...

我已经使用

启动了 pm2
pm2 start /path/to/run-myfile.sh

并想测试它是否可以执行非阻塞 node.js 框架...

通过打开另一个 R 控制台并运行以下...

foo <- function(){
con <- curl::curl('http://localhost:4000/mean?samples=10000',handle = curl::new_handle())
on.exit(close(con))
return(readLines(con, n = 1, ok = FALSE, warn = FALSE))
}

system.time(for (i in seq(5)){
print(foo())
})

也许这是我对 node.js 非阻塞框架的工作方式的误解,但在我看来,最后一个循环应该只需要 5 秒多一点。但它似乎需要 25 秒,表明一切都是顺序的而不是并行的。

我如何使用 plumber 包来实现非阻塞特性?

最佳答案

不幸的是,pm2 无法为您负载平衡 R 进程。 R 是单线程的,并没有真正的库允许它像 NodeJS 那样以异步方式运行(目前),所以今天在管道工中没有很多好的方法来并行化这样的代码。最好的选择是运行多个 plumber R 后端并在它们之间分配流量。请参阅此处的“负载平衡”部分:http://plumber.trestletech.com/docs/docker-advanced

关于用于 node.js 并行处理的 R plumber 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com