Je voudrais utiliser le paquet plombier pour effectuer un traitement parallèle flexible et espérait qu'il fonctionnerait dans un cadre node.js tel qu'il ne soit pas bloquant ...R paquet de plombier pour le traitement parallèle node.js
J'ai le fichier plombier suivant.
# myfile.R
#* @get /mean
normalMean <- function(samples=10){
Sys.sleep(5)
data <- rnorm(samples)
mean(data)
}
J'ai aussi installé PM2 comme le suggère ici http://plumber.trestletech.com/docs/hosting/
J'ai aussi fait le même fichier run-myfile.sh
-à-dire
#!/bin/bash
R -e "library(plumber); pr <- plumb('myfile.R'); pr\$run(port=4000)"
et rendu exécutable comme l'a suggéré ...
I ont démarré pm2 en utilisant
pm2 start /path/to/run-myfile.sh
et je voulais tester pour voir si elle pouvait réaliser un cadre node.js
non bloquant ...
en ouvrant une autre console de R et exécutant la commande suivante ...
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())
})
Peut-être est ma mauvaise compréhension de la façon dont un cadre non-bloquant node.js
est censé fonctionner, mais dans ma tête la dernière boucle ne devrait prendre qu'un peu plus de 5 secondes. Mais il semble prendre 25 secondes, suggérant que tout est séquentiel plutôt que parallèle.
Comment est-ce que je pourrais utiliser l'ensemble de plombier pour effectuer cette nature non-bloquante?
Il y a une discussion en cours ici, ce qui serait le meilleur endroit pour continuer la conversation: https://github.com/trestletech/plumber/issues/31 –