我想使用管道工包来执行一些灵活的并行处理,并希望它可以在 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 秒,这表明一切都是顺序的,而不是并行的。
我如何使用水管工包来实现这种非阻塞性质?