2016-01-12 15 views
5

Di seguito ho trovato un codice molto semplice. #!/Usr/bin/python da multiprocessing importazione Pool tempo importPerché la multiprocessing di Python è in esecuzione in sequenza?

def worker(job): 
    if job in range(25,30): 
     time.sleep(10) 
    print "job:%s" %job 
    return (job) 

pool = Pool(processes=10) 
result = [] 

for job in range(1, 1000): 
    result.append(pool.apply_async(worker(job))) 
pool.close() 
pool.join() 

Come potete vedere, ho un lavoratore di gestire 1000 posti di lavoro utilizzano il multiprocessing. Se il lavoro è 25-30, il lavoratore dormirà 10 secondi. Questo è provare a simulare un lavoro di costo tempo/risorsa.

Quando eseguo il codice precedente, l'out put è come indicato di seguito. Dal lavoro 25. L'intero processo è in esecuzione come un processo sequenziale. Perché ogni 10s viene emesso dopo il lavoro 24. Fino al completamento del lavoro 30.

Ma perché? Il processo di multiprocessing non dovrebbe essere eseguito contemporaneamente?

[[email protected] tmp]# ./a.py 
job:1 
job:2 
job:3 
job:4 
job:5 
job:6 
job:7 
job:8 
job:9 
job:10 
job:11 
job:12 
job:13 
job:14 
job:15 
job:16 
job:17 
job:18 
job:19 
job:20 
job:21 
job:22 
job:23 
job:24 


job:25 
job:26 
... 

risposta

4

Perché lo si chiama in istanziazione. Dovresti passare il callable e gli argomenti, non il risultato, ad apply_async.

result.append(pool.apply_async(worker, [job])) 
+0

Come mi vergogno ...... grazie !!!!!!!! –

Problemi correlati