“annuler l'inscription” un doParallel cluster

Si je lance foreach... %dopar% sans enregistrer un cluster, foreach soulève un avertissement, et exécute le code de manière séquentielle:

library("doParallel")
foreach(i=1:3) %dopar%
  sqrt(i)

Rendements:

Warning message:
executing %dopar% sequentially: no parallel backend registered 

Cependant, si je lance ce même code, après le démarrage, l'enregistrement et l'arrêt d'un cluster, il échoue:

cl <- makeCluster(2)
registerDoParallel(cl)
stopCluster(cl)
rm(cl)
foreach(i=1:3) %dopar%
  sqrt(i)

Rendements:

Error in summary.connection(connection) : invalid connection

Est-il opposé de registerDoParallel() qui nettoie le cluster de l'enregistrement? Ou suis-je coincé avec le fantôme de l'ancien cluster jusqu'à ce que je re-démarrer ma session R?

/edit: une recherche sur google révèle les bumphunter:::foreachCleanup() fonction dans le bumphunter Biocondoctor package:

function () 
{
    if (exists(".revoDoParCluster", where = doParallel:::.options)) {
        if (!is.null(doParallel:::.options$.revoDoParCluster)) 
            stopCluster(doParallel:::.options$.revoDoParCluster)
        remove(".revoDoParCluster", envir = doParallel:::.options)
    }
}
<environment: namespace:bumphunter>

Cependant, cette fonction ne semble pas résoudre le problème.

library(bumphunter)
cl <- makeCluster(2)
registerDoParallel(cl)
stopCluster(cl)
rm(cl)
bumphunter:::foreachCleanup()
foreach(i=1:3) %dopar%
  sqrt(i)

Où foreach de conserver les informations sur le cluster?

  • Ne devriez-vous pas être à l'aide de stopCluster(cl) après le foreach() de l'op? La fourche doit être fermée et il n'y a pas besoin d'enlever la cl de l'objet.
  • McCarthy Habituellement qu'est ce que vous feriez, oui. Le point est, après la fourche est fermé, foreach est toujours recherché par l'arrêté du cluster.
  • Peut-être que je ne suis pas vous suit à droite. Le comportement attendu est de courir foreach après le cluster est arrêté, ou contre votre gré, le cluster s'arrête prématurément, avant foreach finitions, ou quelque chose d'autre? En relisant, vous voulez qu'il fonctionne, mais avec un avertissement dans le cas où le cluster est arrêté?
  • McCarthy j'aimerais revenir à foreach en cours d'exécution avec un avertissement plutôt qu'une erreur après que le cluster est de-enregistrés.
InformationsquelleAutor Zach | 2014-08-02