Domanda

Il codice riportato di seguito non sembra funzionare correttamente per me.Si richiede una ppserver su un altro computer della rete, ad esempio con il comando seguente:

ppserver.py -r -a -w 4

Una volta che questo server è avviato, sulla mia macchina ho eseguito questo codice:

import pp
import time
job_server = pp.Server(ppservers = ("*",))
job_server.set_ncpus(0)
def addOneBillion(x):
    r = x
    for i in xrange(10**9):
        r+=1
    f = open('/home/tomb/statusfile.txt', 'a')
    f.write('finished at '+time.asctime()+' for job with input '+str(x)+'\n')
    return r

jobs = []
jobs.append(job_server.submit(addOneBillion, (1,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (2,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (3,), (), ("time",)))

for job in jobs:
    print job()
print 'done'

Il dispari parte:Guardando l' /home/tomb/statusfile.txt posso vedere che va scritto più volte, come se la funzione viene eseguita più volte.Ho osservato questo continua per più di un'ora prima, e mai visto un job() ritorno.

Odder:Se cambia il numero di iterazioni nel testfunc definizione di 10**8, la funzione di eseguire solo una volta, e restituisce un risultato come previsto!

Sembra come una sorta di condizione di competizione?Usando solo locale core funziona bene.Questo è con pp v 1.6.0 e 1.5.7.

Aggiornamento:Intorno 775,000,000:Ottenere risultati incoerenti:due lavori di ripetere una sola volta, termina il primo tempo.

Settimana dopo l'aggiornamento:Ho scritto la mia elaborazione in parallelo modulo per ottenere intorno a questo, e di evitare parallelo python in futuro, a meno che qualcuno figure di questo prendo in giro alla ricerca di un po ' di più (in realtà immersioni nel codice sorgente) ad un certo punto.

Mesi dopo l'aggiornamento:Nessun residuo fisso sentimenti, Parallela di Python.Ho intenzione di tornare non appena ho tempo di migrare la mia applicazione.Modifica titolo per riflettere soluzione.

È stato utile?

Soluzione

Risposta da Bagira del Parallelo Python forum:

Quanto dura il calcolo di ogni lavoro di prendere?Guarda la variabile TRANSPORT_SOCKET_TIMEOUT in /usr/local/lib/python2.6/dist-packages/pptransport.py.

Forse il vostro lavoro richiede più il tempo nella variabile di cui sopra.Aumento il valore di esso e provare.

Si scopre che questo era esattamente il problema.Nella mia applicazione che sto usando PP come un batch di pianificazione di posti di lavoro che può richiedere diversi minuti, quindi ho bisogno di regolare questo.(il valore predefinito è 30 anni)

Altri suggerimenti

Può essere che la biblioteca consente duplicati come alcuni nodi ritardo ci sarà una lunga coda di attività rimanenti per completare.La duplicazione di compiti, è possibile ignorare il lento nodi e si deve solo prendere il risultato che finisce prima.È possibile aggirare il problema inserendo un id univoco per ogni attività e di accettare solo la prima di ritorno per ogni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top