Sto cercando di risolvere un grosso problema numerico che coinvolge molti sottoproblemi e sto utilizzando il modulo di multiprocessing di Python (in particolare Pool.map) per suddividere diversi sottoproblemi indipendenti su diversi core. Ogni sottoproblema comporta il calcolo di molti sottoprobleble e sto cercando di memorizzare efficacemente questi risultati memorizzandoli in un file se non sono ancora stati calcolati da alcun processo, altrimenti salta il calcolo e leggi i risultati dal file.Elaborazione multiprocesso in Python in modo sicuro in un file
Sono in corso problemi di concorrenza con i file: diversi processi a volte controllano se un sotto-sottoproblema è stato ancora calcolato (cercando il file in cui verranno archiviati i risultati), vedere che non lo ha, eseguire il calcolo, quindi provare a scrivere i risultati nello stesso file allo stesso tempo. Come evito di scrivere collisioni come questa?
Partenza un esempio dalla documentazione di usare [ 'multiprocessing.Lock'] (http://docs.python.org/2/library/multiprocessing.html#synchronization-between-processes) per sincronizzare multipla processi. –
Si potrebbe avere un unico processo di scrittura dei risultati, con una coda come input che potrebbe essere alimentata dagli altri processi di lavoro. Credo che sarebbe sicuro avere tutti i processi di lavoro di sola lettura. – GP89
Avrei dovuto dire che, per rendere le cose più complicate, sto eseguendo più grossi problemi principali nello stesso momento su un cluster, con ciascuno dei quali scrive risultati in sottoproblemi sullo stesso file system di rete. Quindi posso ottenere collisioni da processi eseguiti su macchine separate interamente (quindi non penso che le soluzioni che usano cose come il multiprocessing.Lock funzioneranno). –