Cos'è il mutithreading in Python e come ottenerlo?



Scopri cos'è il multitasking in Python. Spiega anche il multithreading come creare thread senza creare una classe, estendendo la classe Thread e senza estenderla.

Il tempo è il fattore più critico nella vita. Data la sua importanza, il mondo della programmazione fornisce vari trucchi e tecniche che aiutano notevolmente a ridurre il consumo di tempo, aumentando così le prestazioni. Uno di questi approcci è il multithreading in Python, che è uno dei concetti più importanti trattati in .

Ecco un breve riassunto di tutte le major trattate in questo articolo:





Cosa è multitasking in Python?
Cos'è un thread?
Cos'è il multithreading in Python?
Quando utilizzare il multithreading in Python?
Come ottenere il multithreading in Python?
Come creare thread in Python?

Vantaggi dell'utilizzo del multithreading in Python



Per cominciare, proviamo prima a capire il multitasking prima di iniziare a conoscere il multithreading in Python.

Cos'è il multitasking in Python?

Il multitasking, in generale, è la capacità di eseguire più attività contemporaneamente. In termini tecnici, il multitasking si riferisce alla capacità di un sistema operativo di eseguire diverse attività contemporaneamente. Per esempio , stai scaricando qualcosa sul tuo PC, ascoltando canzoni e contemporaneamente giocando a un gioco, ecc. Tutte queste attività vengono eseguite dallo stesso sistema operativo e sincronizzate. Questo non è altro che multitasking che non solo ti aiuta a risparmiare tempo, ma aumenta anche la produttività.

Esistono due tipi di multitasking in un sistema operativo:



  • Basato sul processo
  • Basato su thread

In questo articolo imparerai a conoscere Basato su thread multitasking o Multithreading .

Cos'è un thread?

thread-multithreading in python-edurekaUn thread è fondamentalmente un file indipendente flusso di esecuzione. Un singolo processo può essere costituito da più thread. Ogni thread in un programma esegue un'attività particolare. Per esempio, quando stai giocando a un gioco dì FIFA sul tuo PC, il gioco nel suo insieme è un singolo processo , ma è costituito da diversi thread responsabili della riproduzione della musica, che ricevono input dall'utente, che eseguono l'avversario in modo sincrono, ecc. Tutti questi sono thread separati responsabili dell'esecuzione di questi diversi compiti nello stesso programma.

Ogni processo ha un thread che è sempre in esecuzione. Questo è il filo conduttore. Questo thread principale crea effettivamente gli oggetti thread figlio. Il thread figlio viene avviato anche dal thread principale. Ti mostrerò più avanti in questo articolo come controllare il thread in esecuzione corrente.

Quindi, con questo, spero che tu abbia capito chiaramente cos'è un thread. Andando avanti, vediamo cosa è il multithreading in Python.

Quando utilizzare il multithreading in Python?

Il multithreading è molto utile per risparmiare tempo e migliorare le prestazioni, ma non può essere applicato ovunque.
Nell'esempio FIFA precedente, il thread musicale è indipendente dal thread che riceve il tuo input e il thread che prende il tuo input è indipendente dal thread che esegue il tuo avversario. Questi thread vengono eseguiti in modo indipendente perché non sono interdipendenti.

Pertanto, il multithreading può essere utilizzato solo quando la dipendenza tra i singoli thread non esiste.

Questo articolo mostra ulteriormente come ottenere il multithreading in Python.

Come ottenere il multithreading in Python?

Il multithreading in Python può essere ottenuto importando il file filettatura modulo.

Prima di importare questo modulo, dovrai installarlo. Per installarlo sul tuo ambiente anaconda, esegui il seguente comando sul tuo prompt di anaconda:

conda install -c conda-forge tbb

Dopo che è stato installato con successo, puoi utilizzare uno dei seguenti comandi per importare il modulo di threading:

importazione thread da importazione thread *

Ora che hai installato il modulo di threading, andiamo avanti e facciamo il multithreading in Python.

Come creare thread in Python?


I thread in Python possono essere creati in tre modi:

  1. Senza creare una classe
  2. Estendendo la classe Thread
  3. Senza estendere la classe Thread

Senza creare una classe

Il multithreading in Python può essere realizzato anche senza creare una classe. Ecco un esempio per dimostrare lo stesso:

Esempio:

from threading import * print (current_thread (). getName ()) def mt (): print ('Child Thread') child = Thread (target = mt) child.start () print ('Executing thread name:', current_thread ( ) .getName ())

Produzione:

MainThread Child Thread Nome del thread in esecuzione: MainThread

L'output precedente mostra che il primo thread presente è il thread principale. Questo thread principale crea quindi un thread figlio che sta eseguendo la funzione e quindi l'istruzione print finale viene eseguita di nuovo dal thread principale.

Ora andiamo avanti e vediamo come eseguire il multithreading in python estendendo la classe Thread.

ruby on rails web tutorial

Estendendo la classe Thread:

Quando una classe figlia viene creata estendendo la classe Thread, la classe figlio rappresenta che un nuovo thread sta eseguendo alcune attività. Quando si estende la classe Thread, la classe figlia può sovrascrivere solo due metodi, ovvero il metodo __init __ () e il metodo run (). Nessun altro metodo può essere sovrascritto oltre a questi due metodi.

Ecco un esempio di come estendere la classe Thread per creare un thread:

Esempio:

import threading import time class mythread (threading.Thread): def run (self): for x in range (7): print ('Hi from child') a = mythread () a.start () a.join () print ('Ciao da', current_thread (). GetName ())

Produzione:
Ciao da bambino
Ciao da bambino
Ciao da bambino
Ciao da bambino
Ciao da bambino
Ciao da bambino
Ciao da bambino
Ciao da MainThread

L'esempio precedente mostra che la classe myclass eredita la classe Thread e la classe figlia, ovvero myclass, sovrascrive il metodo run. Per impostazione predefinita, il primo parametro di qualsiasi funzione di classe deve essere self che è il puntatore all'oggetto corrente. L'output mostra che il thread figlio esegue il metodo run () e il thread principale attende il completamento dell'esecuzione del figlio. Ciò è dovuto alla funzione join (), che fa attendere il thread principale che il bambino finisca.

Questo metodo di creazione di thread è il metodo più preferito perché è il metodo standard. Ma nel caso in cui desideri creare thread senza ereditare o estendere la classe Thread, puoi farlo nel modo seguente.

Senza estensione della classe Thread

Per creare un thread senza estendere la classe Thread, puoi procedere come segue:
Esempio:

from threading import * class ex: def myfunc (self): #self necessario come primo parametro in una classe func per x nell'intervallo (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('fatto')

Produzione:

Bambino
Bambino
Bambino
Bambino
Bambino
Bambino
Bambino
fatto

Il thread figlio esegue myfunc dopo di che il thread principale esegue l'ultima istruzione print.

Vantaggi dell'utilizzo della filettatura

Il multithreading presenta molti vantaggi, alcuni dei quali sono i seguenti:

  • Migliore utilizzo delle risorse
  • Semplifica il codice
  • Consente l'occorrenza simultanea e parallela di varie attività
  • Riduce il consumo di tempo o il tempo di risposta, aumentando così le prestazioni.

Ecco un esempio per verificare quanto tempo impiega un codice per essere eseguito con e senza multithreading in Python:

 Esempio: 
import time def sqr (n): for x in n: time.sleep (1) x% 2 def cube (n): for x in n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) cube (n) e = time.time () print (es)

Produzione:

16.042309284210205

Quanto sopra è il tempo di output necessario per eseguire il programma senza utilizzare i thread. Ora usiamo i thread e vediamo cosa succede allo stesso programma:

Esempio:

importa il threading dal threading importa * importa l'ora def sqr (n): for x in n: time.sleep (1) print ('Resto dopo la divisione per 2', x% 2) def cube (n): for x in n: time.sleep (1) print ('Resto dopo la divisione per 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Thread ( target = sqr, args = (n,)) t2 = Thread (target = cube, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () print (end-start)
Produzione: 9.040220737457275

L'output sopra mostra chiaramente che il tempo impiegato quando usiamo i thread è molto inferiore rispetto al tempo impiegato dallo stesso programma per essere eseguito senza usare i thread.

Spero che tu sia chiaro con i concetti trattati in questo articolo relativi al multithreading in Python. Assicurati di esercitarti il ​​più possibile poiché questo è uno dei concetti più importanti utilizzati nella programmazione.

Hai domande per noi? Si prega di menzionarlo nella sezione commenti di questo blog 'Multithreading in Python' e noi volere ricontattarti il ​​prima possibile.

Per ottenere una conoscenza approfondita di Python e delle sue varie applicazioni, puoi iscriverti a live con supporto 24 ore su 24, 7 giorni su 7 e accesso a vita.