Ho un sacco di diversi processi R (lanciati in modo indipendente dalla riga di comando) che tutti hanno bisogno di caricare diversi file grandi. Per evitare l'intasamento della rete, voglio aggiungere un blocco/semaforo, ad es. tramite un file di blocco, in modo che ottengano il loro file uno dopo l'altro. Solo un processo dovrebbe essere in grado di acquisire il blocco, su un sistema Linux standard.C'è un modo per condividere un blocco (ad esempio un file di blocco) tra processi R?
6
A
risposta
3
Mentre io non riuscivo a trovare un pacchetto R, c'è il comando di Linux lockfile
che può essere utilizzato:
write("Attempting to get lock", stderr())
system("lockfile /tmp/my_simple_lock")
# Do stuff
write("Releasing lock", stderr())
system("rm -f /tmp/my_simple_lock")
+2
invece di 'sistema ("rm -f/tmp/my_simple_lock")' è anche possibile utilizzare 'file.remove ("/ tmp/my_simple_lock")' – blueblob
1
Una versione forse più esplicita della risposta precedente. Se il file si accede si chiama il nome del file, e si opera in una singola directory ... (se si utilizzano diverse directory, poi ovvio sostituire il nome del file con l'intero percorso)
write("Attempting to get lock", stderr())
system("lockfile filename.lock")
\# do whatever you want to the file
write("Releasing lock", stderr())
remove.file("filename.lock")
Problemi correlati
- 1. Python che condivide un blocco tra i processi
- 2. Passando un blocco ad un delayed_job
- 3. Applicare un commit blocco per blocco
- 4. Condivisione di un blocco tra lavoratori gunicorn
- 5. È meglio avere un blocco sincronizzato all'interno di un blocco try o un blocco try all'interno di un blocco sincronizzato?
- 6. Rubino: blocco di rendimento da un blocco?
- 7. Monadi multipli in un blocco di blocco
- 8. sintassi per definire un blocco che prende un blocco e restituisce un blocco in Objective-C
- 9. assegnare una variabile all'interno di un blocco ad una variabile all'esterno di un blocco
- 10. Blocco copia e incolla, c'è un modo per condividere i formattatori di dettagli Java
- 11. Magento - Passaggio di dati tra un controller e un blocco
- 12. Un modo per fermare un blocco letterale rapida
- 13. Blocco di lettore/scrittore tra processi con Boost
- 14. C'è un blocco di file in Rust?
- 15. Differenza tra un blocco it e un blocco di specifica in RSpec
- 16. Errore specificato da rspec `Then` non è disponibile all'interno di un esempio (ad esempio un blocco` it`)
- 17. È possibile riutilizzare un blocco "param" tra più funzioni?
- 18. errore di sintassi di blocco da esempio di Apple 'Creazione di un blocco'
- 19. Blocco di un ramo Git
- 20. `method_missing ':` build` non è disponibile su un gruppo di esempio (ad esempio un blocco `describe` o` context`)
- 21. Come memorizzare la mappa (mmap) un dispositivo di blocco linux (ad esempio/dev/sdb) in Java?
- 22. Come rilasciare un blocco
- 23. Lettura (registro) file senza blocco rinominazione/spostamento per altri processi
- 24. C'è un modo per condividere oggetti tra pagine php?
- 25. C'è un modo per evitare questo blocco di codice?
- 26. Rendi il codice sorgente da un blocco di codice l'ingresso ad un altro blocco di codice in Emacs org-mode
- 27. Come estrarre un singolo blocco di byte da un file?
- 28. impedisce l'esecuzione di un blocco in rmarkdown
- 29. Avere un blocco/comando Ruby fallire in modo silenzioso senza un blocco vuoto 'rescue'
- 30. Condividere un oggetto tra file QML
Quali vantaggi vi aspettate da attuare Questo? Quanti processi ci sono e quanto sono grandi i file? Non dovrebbe piuttosto essere implementato dal file server? – krlmlr
Eseguo 15 processi sullo stesso server, le dimensioni dei file sono fino a 3 GB. Ho osservato ondate di processi che aspettano i loro file (CPU sprecata), seguiti da tempi in cui tutti sono informati (larghezza di banda sprecata). Scaglionare i tempi di caricamento porta a un uso più efficiente della CPU e della rete. Il fileserver tenta di soddisfare tutte le richieste contemporaneamente. –