Què és Mutithreading a Python i com aconseguir-ho?



Apreneu què és la multitarea a Python. També explica com multiprocessar com crear fils sense crear una classe, ampliant la classe de fils i sense ampliar-la.

El temps és el factor més crític de la vida. A causa de la seva importància, el món de la programació proporciona diversos trucs i tècniques que us ajuden de manera significativa a reduir el consum de temps, augmentant així el rendiment. Un d'aquests enfocaments és Multithreading a Python, que és un dels conceptes més importants que es tracten .

Aquí teniu un resum ràpid de tots els aspectes principals que es tracten en aquest article:





Què és multitarea a Python?
Què és un fil?
Què és el multithreading a Python?
Quan s’ha d’utilitzar el multithreading a Python?
Com s'aconsegueix Multithreading a Python?
Com es poden crear fils a Python?

Avantatges d'utilitzar multithreading a Python



Per començar, intentem comprendre la multitarea abans de començar a aprendre sobre Multithreading a Python.

tipus de marcs en seleni

Què és la multitarea a Python?

La multitarea, en general, és la capacitat de realitzar diverses tasques simultàniament. En termes tècnics, la multitarea fa referència a la capacitat d’un sistema operatiu de realitzar diferents tasques alhora. Per exemple , esteu descarregant alguna cosa al vostre PC, escoltant cançons i jugant simultàniament a un joc, etc. Totes aquestes tasques les realitza el mateix sistema operatiu i sincronitzades. Això no és res més que la multitarea que no només us ajuda a estalviar temps, sinó que també augmenta la productivitat.

Hi ha dos tipus de multitasca en un sistema operatiu:



  • Basat en processos
  • Basat en fils

En aquest article, coneixereu Basat en fils multitarea o Multithreading .

Què és un fil?

fils-multithreading a python-edurekaUn fil bàsicament és un independent flux d'execució. Un sol procés pot consistir en diversos fils. Cada fil d'un programa realitza una tasca particular. Per exemple, quan jugueu a un joc, digueu FIFA al vostre PC, el joc en general és un procés únic , però consisteix en diversos fils encarregats de reproduir la música, de rebre aportacions de l'usuari, d'executar l'oponent de manera sincronitzada, etc. Tots aquests són fils separats responsables de dur a terme aquestes diferents tasques en el mateix programa.

Cada procés té un fil que sempre s’executa. Aquest és el fil conductor. Aquest fil principal crea en realitat els objectes de fil secundari. El fil secundari també és iniciat pel fil principal. En aquest article us mostraré més informació sobre com comprovar el fil actual en execució.

Per tant, amb això, espero que hagueu entès clarament què és un fil conductor. Seguim endavant, a veure què és Multithreading a Python.

Quan s’ha d’utilitzar Multithreading a Python?

El multithreading és molt útil per estalviar temps i millorar el rendiment, però no es pot aplicar a tot arreu.
A l'exemple anterior de la FIFA, el fil musical és independent del fil que pren la vostra entrada i el fil que pren la vostra informació és independent del fil que executa el vostre oponent. Aquests fils s'executen de manera independent perquè no són interdependents.

Per tant, el multithreading només es pot utilitzar quan no existeix la dependència entre fils individuals.

Aquest article mostra a més com es pot aconseguir Multithreading a Python.

Com s'aconsegueix Multithreading a Python?

Es pot aconseguir un multi-threading a Python important el fitxer enfilament mòdul.

Abans d’importar aquest mòdul, l’haureu d’instal·lar. Per instal·lar-lo al vostre entorn anaconda, executeu l'ordre següent a la vostra sol·licitud d'anaconda:

conda install -c conda-forge tbb

Després d’instal·lar-la correctament, podeu utilitzar qualsevol de les ordres següents per importar el mòdul de roscat:

importació de fils de la importació de fils *

Ara que teniu instal·lat el mòdul de rosca, anem a seguir endavant i fem Multithreading a Python.

Com es poden crear fils a Python?


Els fils a Python es poden crear de tres maneres:

  1. Sense crear classe
  2. En ampliar la classe Thread
  3. Sense ampliar la classe Thread

Sense crear classe

Multithreading a Python es pot aconseguir sense crear una classe també. Aquí hi ha un exemple per demostrar el mateix:

Exemple:

des de la importació de fils * print (current_thread (). getName ()) def mt (): print ('Fils infantil') child = Fils (target = mt) child.start () print ('Executant nom del fil:', current_thread ( ) .getName ())

Sortida:

MainThread Child Thread Executant el nom del fil: MainThread

La sortida anterior mostra que el primer fil que hi ha és el fil principal. A continuació, aquest fil principal crea un fil secundari que executa la funció i, a continuació, la instrucció final d’impressió s’executa de nou pel fil principal.

Ara anem endavant i veurem com fer Multithreading en python ampliant la classe Thread.

En ampliar la classe de fil:

Quan es crea una classe fill ampliant la classe Thread, la classe child representa que un nou fil està executant alguna tasca. En ampliar la classe Thread, la classe fill només pot anul·lar dos mètodes, és a dir, el mètode __init __ () i el mètode run (). No es pot anul·lar cap altre mètode que no siguin aquests dos mètodes.

A continuació, es mostra un exemple d’estendre la classe Thread per crear un thread:

Exemple:

importar threading importar classe de temps mythread (threading.Thread): execució def (auto): per a x en el rang (7): print ('Hola des del nen') a = mythread () a.start () a.join () print ('Adéu de', current_thread (). GetName ())

Sortida:
Hola des de nen
Hola des de nen
Hola des de nen
Hola des de nen
Hola des de nen
Hola des de nen
Hola des de nen
Adéu de MainThread

L'exemple anterior mostra que la classe myclass hereta la classe Thread i la classe fill és a dir, myclass substitueix el mètode d'execució. Per defecte, el primer paràmetre de qualsevol funció de classe ha de ser self, que és el punter de l'objecte actual. La sortida mostra que el fil fill executa el mètode run () i el fil principal espera que finalitzi l'execució del fill. Això es deu a la funció join (), que fa que el fil principal esperi que acabi el nen.

Aquest mètode de creació de fils és el mètode més preferit perquè és el mètode estàndard. Però en cas que vulgueu crear fils sense heretar ni ampliar la classe de fils, podeu fer-ho de la següent manera.

Sense ampliar la classe de fil

Per crear un fil sense ampliar la classe de fil, podeu fer el següent:
Exemple:

from threading import * class ex: def myfunc (self): #self necessari com a primer paràmetre en una classe func per a x en el rang (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('fet')

Sortida:

Nen
Nen
Nen
Nen
Nen
Nen
Nen
fet

El fil fill executa myfunc després del qual el fil principal executa la darrera sentència d'impressió.

Avantatges d'utilitzar el roscat

El multithreading té molts avantatges, alguns dels quals són els següents:

  • Millor aprofitament dels recursos
  • Simplifica el codi
  • Permet l'aparició simultània i paral·lela de diverses tasques
  • Redueix el consum de temps o el temps de resposta, augmentant així el rendiment.

A continuació, es mostra un exemple per comprovar el temps que triga un codi a executar-se amb i sense multithreading a Python:

Què és un error clau a Python?
 Exemple: 
temps d'importació def sqr (n): per a x en n: time.sleep (1) x% 2 def cub (n): per a x en n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) cub (n) e = time.time () print (es)

Sortida:

16.042309284210205

L'anterior és el temps de sortida necessari per executar el programa sense utilitzar fils. Ara fem servir fils i veiem què passa amb el mateix programa:

Exemple:

importació de fils des de fils importació * temps d'importació def sqr (n): per a x en n: time.sleep (1) imprimir ('Resta després de dividir per 2', x% 2) def cub (n): per a x en n: time.sleep (1) print ('Resta després de dividir per 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Fil ( objectiu = sqr, args = (n,)) t2 = Fil (objectiu = cub, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () print (end-start)
Sortida: 9.040220737457275

La sortida anterior mostra clarament que el temps que prenem quan utilitzem fils és molt menor en comparació amb el temps que s’ha trigat a executar el mateix programa sense utilitzar fils.

Espero que tingueu clar els conceptes tractats en aquest article relacionat amb Multithreading a Python. Assegureu-vos de practicar el màxim possible ja que aquest és un dels conceptes més importants que s’utilitzen en la programació.

Tens alguna pregunta? Si us plau, mencioneu-ho a la secció de comentaris d’aquest bloc “Multithreading a Python” i nosaltres voluntat contacti amb vostè el més aviat possible.

Per obtenir coneixements en profunditat sobre Python juntament amb les seves diverses aplicacions, podeu inscriure-us a la publicació amb assistència les 24 hores del dia, els 7 dies de la setmana i accés permanent.