English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Il multiprocessamento è un pacchetto che supporta la generazione di programmi utilizzando l'API. Questo pacchetto è utilizzato per la concorrenza locale e remota. Utilizzando questo modulo, gli sviluppatori possono utilizzare più processori sul computer specificato. Può essere eseguito su sistemi operativi Windows e UNIX.
Questo pacchetto contiene tutti gli atomi di sincronizzazione equivalenti.
from multiprocessing import Process, Lock def my_function(x, y): x.acquire() print('hello world', y) x.release() if __name__ == '__main__': lock = Lock() for num in range(10): Process(target=my_function, args=(lock, num)).start()
In questo contesto, un esempio può essere bloccato per assicurarsi che solo un processo possa visualizzare l'output standard in una volta.
Per il pool, utilizziamo la classe Pool. Quando qualcuno può creare un pool di processo, porterà tutte le attività presentate a lui.
class multiprocessing.Pool([processes[, initializer[, initargs[, maxtasksperchild]]]])
L'oggetto pool controlla il pool di lavoro per selezionare i compiti che possono essere presentati, supporta risultati asincroni con timeout, callback e implementazione di mappatura parallela.
Se il processo è vuoto, utilizzare cpu_count(); se inizializzato non None, chiamare questa funzione con initializer(* initargs).
apply(func[, args[, kwds]])
Questo è simile aapply()
Ha lo stesso comportamento della funzione built-in. Blocca fino a che il risultato non è pronto, se si desidera eseguire in parallelo, è meglio utilizzare il metodo apply_async().
apply_async(func[, args[, kwds[, callback]]])
Restituisce un oggetto di risultato.
map(func, iterabile[,chunksize])
map() è una funzione built-in che supporta solo un parametro iterabile. Blocca fino a che il risultato non è pronto.
In questo metodo, l'iterabile viene diviso in molti pezzi e questi pezzi vengono presentati come task singoli al pool di processo.
map_async(func, iterable [,chunksize [,callback]])
Restituisce un oggetto di risultato.
imap(func, iterable [,chunksize])
Simile a itertools.imap().
La dimensione dei parametri è la stessamap()
.
imap_unordered(func, iterable [,chunksize])
Questo è simile aimap()
Riorganizzare l'ordine dell'iteratore allo stesso modo.
Chiudere()
Dopo che il personale ha completato tutte le attività, il personale esce dal flusso.
Terminare()
Se dobbiamo fermare immediatamente il processo di lavoro senza completare il lavoro, utilizzare questo metodo.
join()
Quando si utilizzajoin()
Prima di utilizzareclose()
eterminate()
Funzione.
Classe multiprocessing.pool.AsyncResult
Restituito da Pool.apply_async() e Pool.map_async().
get([timeout])
Questa funzione restituisce il risultato al momento dell'arrivo.
Attesa ([timeout])
Utilizzando questa funzione di attesa, aspettiamo che il risultato sia disponibile o fino a che siano trascorsi secondi di timeout.
Preparazione()
Questa funzione restituisce se la chiamata è completata.
Successo()
Dopo la chiamata non ci sono errori, questa funzione restituirà.
# -*- coding: utf-8 -*- Creato il lunedì 30 set 2018 12:17:58 @autore: oldtoolbag.com from multiprocessing import Pool import time def myfunction(m): return m*m if __name__ == '__main__': my_pool = Pool(processes=4) # avvia 4 processi di lavoro result = my_pool.apply_async(myfunction, (10,)) # valuta "f(10)" asincronamente in un singolo processo print (result.get(timeout=1)) print (my_pool.map(myfunction, range(10))) # stampa "[0, 1, 4,..., 81]" my_it = my_pool.imap(myfunction, range(10)) print (my_it.next()) # stampa "0" print (my_it.next()) # stampa "1" print (my_it.next(timeout=1)) # stampa "4" a meno che il tuo computer non sia *molto* lento result = my_pool.apply_async(time.sleep, (10,)) print (result.get(timeout=1)) # solleva l'errore di TimeoutError di multiprocessing