IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

foreach() %dopar% : Chaque processus écrit dans un même fichier


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut foreach() %dopar% : Chaque processus écrit dans un même fichier
    Bonjour,

    Je voudrais savoir comment pourrais-je dans un programme parallélisé avec foreach() %dopar% faire en sorte que chaque processus écrivent dans un même fichier.
    J'ai essayé plein de méthodes mais aucune ne fait vraiment ce que je veux.
    ( Je veux ouvrir une fois la connexion vers le fichier puis la fermer à la fin alors qu'avec write.table() il ouvre autant de fois qu'il doit écrire quelque chose )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    path_file <- "path"
    cl <- makeCluster(3)
    registerDoParallel(cl)
     
    # fileConn  <- file(path_file,open = "a")
    # lock <-tempfile()
    # locked <- flock::lock(lock)
     
    foreach(i = 1:103) %dopar%  #do
    {
      # locked <- flock::lock(lock, exclusive = T)
      phrase <- paste("hello","world", i,"\n")
      cat(phrase, file = path_file, append=TRUE)
      # flock::unlock(locked)
    }
    # close(fileConn)
    parallel::stopCluster(cl)

  2. #2
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Par défaut
    Bonjour,

    je ne suis pas convaincu que ça puisse tout le temps fonctionner avec un fichier texte. Dans l'exemple ci dessous, il ne m'a rien écrit pour i = 3 et i = 6, probablement parce que les différents processus tentaient d'accéder au fichier en même temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    require(doParallel)
    cl <- makeCluster(3)
    registerDoParallel(cl)
    path_file <- "D:/test/R/test_dopar.txt"
    clusterExport(cl, "path_file")
     
    foreach(i = 1:12) %dopar%
    {
      phrase <- paste("hello world", i, "\n")
      cat(phrase, file = path_file, append = TRUE)
    }
    stopCluster(cl)
    cdlt

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 606
    Par défaut
    Bonjour,

    Oui je l'ai remarqué aussi c'est pour ca que je suis passé à la méthode avec le package flock mais il ne fonctionne pas avec le %dopar%, il n'écrit rien dans le fichier.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/01/2010, 13h49
  2. Réponses: 1
    Dernier message: 10/07/2007, 17h14
  3. spooler dans le même fichier
    Par big1 dans le forum SQL
    Réponses: 1
    Dernier message: 25/09/2006, 14h06
  4. Réponses: 8
    Dernier message: 23/06/2006, 13h51
  5. Réponses: 5
    Dernier message: 08/12/2004, 20h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo