ThreadPoolexecutor Python

ThreadPoolexecutor Python
ThreadPoolexecutor è una classe Python trovata nel suo pacchetto chiamato “Concorrente.Futures ". Diciamo che dovevamo fare molti thread nei nostri lavori altamente paralleli. È il più costoso, perché potrebbero esserci diverse preoccupazioni di efficienza a causa di tanti più processi. Una grande preoccupazione potrebbe essere che il throughput venga vincolato. Puoi superare questo problema costruendo un pool di thread. Un pool di thread è una raccolta di processi pre-istanziati o inattivi in ​​attesa di essere assegnati. Ogni volta che deve essere completata una serie significativa di attività, si consiglia di solito stabilire un pool di thread per sviluppare nuovi processi per ciascun lavoro. Un pool di thread può svolgere le seguenti attività:
  • Una volta che un processo all'interno di un pool di thread ha completato la sua elaborazione, potrebbe essere nuovamente utilizzato.
  • Quando viene terminata un thread, viene formato un nuovo thread per prendere il suo posto.

Il simultaneo.Il pacchetto Futures è una parte della Biblioteca normale Python. In Python 3.2, questo pacchetto è stato creato per dare ai programmatori un'interfaccia elevata per l'avvio di processi simultanei. Questo è un livello intermedio costruito in cima al multitasking di Python e ai pacchetti multiprocessing che ti consentono di eseguire attività utilizzando un pool di thread o procedure. All'interno di questo articolo, daremo un'occhiata alla classe Executor del pool di thread e alle sue funzioni.

Esempio 01:

Diamo un'occhiata alla classe di esecutore del pool di thread all'interno del nostro codice Python. In primo luogo, abbiamo usato il "simultaneo.Pacchetto Futures ”utilizzando la parola chiave“ From ”nella prima riga per importare la classe“ ThreadPoolexutor ”nel codice. Dopo questo, abbiamo inizializzato un elenco di 4 numeri. La prima funzione è una funzione definita dall'utente denominata "quadrata" e calcolerà un quadrato di un valore passato nei suoi argomenti. L'altro metodo è la funzione del costruttore i.e., Metodo principale () man mano che l'esecuzione inizia da i. Quindi, la funzione definita dall'utente "Square" è definita utilizzando la parola chiave "def" e prende il valore dell'argomento per calcolare il suo quadrato.

Le staffe "" vengono utilizzate per prendere il valore numerico di una variabile "z" invece di prendere "z" come stringa qui. Carattere "F" Prima della dichiarazione di testo e di calcolo mostra che i valori verranno presi come galleggianti e il loro quadrato verrà calcolato. L'istruzione di stampa sta utilizzando questo formato per ottenere un quadrato e stamparlo nella shell di uscita spyder3. Ora, ecco il costruttore di funzioni principali (). Il costruttore sta inizializzando un elenco vuoto chiamato "Val". È ora di utilizzare la classe ThreadPoolexecutor per creare un pool di 5 thread da utilizzare in modo asincrono.

Per questo, utilizza l'istruzione "con" con il nome "ThreadPoolexecutor" che prende un argomento "Max_Workers" con il valore 5. Puoi vederlo come un ciclo che prende 1 valore ogni volta. La funzione di invio della classe ThreadPoolexecutor viene utilizzata per eseguire una funzione i.e., "Quadrato" e produce un quadrato di un numero passato ad esso. Sta prendendo il numero 1 come valore iniziale al metodo quadrata e dopo questo, prenderà i valori dall'elenco "L". La funzione "mappa" viene utilizzata qui per tradurre rapidamente la funzione e iterare collettivamente come uno e solleva un errore nella "concomitante.Pacchetto Futures ". L'eccezione verrà memorizzata nella variabile "val" e l'istruzione di stampa verrà utilizzata per visualizzare quell'eccezione utilizzata nel ciclo "per" nella schermata di uscita.

da simultaneo.Futures Importa ThreadPoolexecutor
L = [2,3,4,5]
DEF Square (Z):
print (f'square di z: z*z ')
Se __Name__ == '__main__':
Val = []
con threadPoolexecutor (max_workers = 5) come exe:
exe.Invia (quadrato, 1)
Val = exe.mappa (quadrata, l)
per res in val:
Stampa (Res)

Il pool di 5 thread è stato creato per calcolare un quadrato di 5 valori a partire da 1 a 5 come visualizzato nell'output.

Esempio 02:

Ecco che arriva l'ultimo esempio di utilizzo della classe ThreadPoolexecutor nel codice Python. Quindi, abbiamo iniziato questi nuovi esempi con l'importazione di una classe utilizzando il suo pacchetto “Concorrente.Futures ". Quindi, inizializza una "somma" variabile con 0 valore. La funzione definita dall'utente denominata "processo" viene dichiarata prendendo un argomento "n" in essa. Questa funzione sta stampando i numeri del thread tramite l'istruzione di stampa. Il numero di thread viene riassunto con il numero 5 aggiunto alla variabile "somma". Questa somma calcolata per ciascun thread verrà mostrata sull'output che utilizza l'istruzione di stampa. La definizione del metodo principale è stata avviata qui. Sta usando il threadpoolexecutor per la creazione di un pool di 3 thread. La funzione "Process" è stata chiamata 3 volte utilizzando la funzione "Invia" per 3 valori diversi. Dopo aver eseguito tutti i thread del metodo di processo, visualizzerà il messaggio di completamento. La dichiarazione di funzione principale () viene utilizzata dopo.

da simultaneo.Futures Importa ThreadPoolexecutor
Somma = 0
DEF Process (N):
print ("Elaborazione del thread: ".formato (n))
Somma = n + 5
print ("somma di e 5 è:".Formato (n), somma)
def main ():
Stampa ("Avvia threadPoolexecutor")
con threadPoolexecutor (max_workers = 3) come ex:
Val = Ex.Invia (processo, (2))
Val = Ex.Invia (processo, (4))
Val = Ex.Invia (processo, (5))
Stampa ("Tutti i thread vengono elaborati completamente")
Se __Name__ == '__main__':
principale()

L'esecuzione mostra che viene avviato il pool e viene visualizzato ogni numero di thread con la sua somma con numero 5.

Conclusione:

Abbiamo coperto e discusso la classe ThreadPoolexecutor e tutte le funzioni eventualmente utilizzate nei nostri esempi. Dovremmo renderlo senza pretese quanto probabile per i nostri utenti. Abbiamo dato un'occhiata a una mappa e anche la funzione. Ci aspettiamo la migliore risposta.