Čo je mutithreading v Pythone a ako ho dosiahnuť?



Zistite, čo je multitasking v pythone. Vysvetľuje tiež multithreading, ako vytvárať vlákna bez vytvorenia triedy, rozšírením triedy Thread a bez jej rozšírenia.

Čas je najdôležitejším faktorom v živote. Vďaka svojmu významu poskytuje svet programovania rôzne triky a techniky, ktoré vám výrazne pomôžu znížiť časovú náročnosť a tým zvýšiť výkon. Jedným z takýchto prístupov je Multithreading v Pythone, ktorý je jedným z najdôležitejších konceptov zahrnutých v tomto dokumente .

Tu je rýchle zhrnutie všetkých veľkých spoločností, ktorým sa venuje tento článok:





Čo je multitasking v Pythone?
Čo je to vlákno?
Čo je multithreading v pythone?
Kedy použiť multithreading v Pythone?
Ako dosiahnuť multithreading v Pythone?
Ako vytvoriť vlákna v Pythone?

Výhody použitia multithreadingu v Pythone



Najprv sa pokúsime porozumieť multitaskingu, až potom sa začneme učiť viacvláknové spracovanie v jazyku Python.

Čo je to multitasking v Pythone?

Multitasking je vo všeobecnosti schopnosť vykonávať viac úloh súčasne. Z technického hľadiska sa multitasking týka schopnosti operačného systému vykonávať rôzne úlohy súčasne. Napríklad , sťahujete niečo do svojho počítača, ako aj počúvanie skladieb a súčasné hranie hier atď. Všetky tieto úlohy vykonáva rovnaký operačný systém a synchronizuje sa. Nie je to nič iné ako multitasking, ktorý vám nielen pomáha šetriť čas, ale aj zvyšuje produktivitu.

V OS existujú dva typy multitaskingu:



  • Procesne založené
  • Na základe vlákna

ako obrátiť reťazce v pythone -

V tomto článku sa dozviete o Na základe vlákna multitasking alebo Viacvláknové spracovanie .

Čo je to vlákno?

threads-multithreading v python-edurekaNiť je v podstate nezávislý priebeh exekúcie. Jeden proces môže pozostávať z viacerých vlákien. Každé vlákno v programe vykonáva určitú úlohu. Napríklad, keď hráte na počítači hru povedzme FIFA, hra ako celok predstavuje jeden proces , ale skladá sa z niekoľkých vlákien zodpovedných za prehrávanie hudby, prijímanie vstupov od používateľov, synchrónne behanie súpera atď. Všetko sú to samostatné vlákna zodpovedné za vykonávanie týchto rôznych úloh v rovnakom programe.

Každý proces má jedno vlákno, ktoré je vždy spustené. Toto je hlavné vlákno. Toto hlavné vlákno v skutočnosti vytvára objekty podradeného vlákna. Podradené vlákno je tiež iniciované hlavným vláknom. Ďalej vám v tomto článku ukážem, ako skontrolovať aktuálne bežiace vlákno.

Takže s týmto dúfam, že ste jasne pochopili, čo je vlákno. Ďalej sa pozrime, čo je to multithreading v Pythone.

Kedy použiť multithreading v Pythone?

Multithreading je veľmi užitočný pre úsporu času a zlepšenie výkonu, ale nedá sa použiť všade.
V predchádzajúcom príklade FIFA je hudobné vlákno nezávislé od vlákna, ktoré prijíma vaše vstupy, a vlákno, ktoré prijíma vaše vstupy, je nezávislé od vlákna, ktoré spúšťa vášho súpera. Tieto vlákna fungujú nezávisle, pretože nie sú navzájom závislé.

Preto je možné viacvláknové spracovanie použiť iba vtedy, ak neexistuje závislosť medzi jednotlivými vláknami.

Tento článok ďalej ukazuje, ako môžete dosiahnuť viacvláknové spracovanie v Pythone.

Ako dosiahnuť multithreading v Pythone?

Multithreading v Pythone je možné dosiahnuť importom súboru závitovanie modul.

Pred importom tohto modulu ho budete musieť nainštalovať. Ak to chcete nainštalovať do prostredia anakondy, vykonajte na príkazovom riadku anakondy nasledujúci príkaz:

conda install -c conda-forge tbb

Po úspešnej inštalácii môžete na importovanie modulu vlákien použiť ktorýkoľvek z nasledujúcich príkazov:

importovať vlákna z vlákna importovať *

Teraz, keď máte nainštalovaný modul vlákien, poďme ďalej a urobme Multithreading v Pythone.

Ako vytvoriť vlákna v Pythone?


Vlákna v Pythone je možné vytvárať tromi spôsobmi:

  1. Bez vytvorenia triedy
  2. Rozšírením triedy Thread
  3. Bez rozšírenia triedy vlákna

Bez vytvorenia triedy

Multithreading v Pythone je možné dosiahnuť aj bez vytvorenia triedy. Tu je príklad, ktorý demonštruje to isté:

Príklad:

z vlákna import * print (current_thread (). getName ()) def mt (): print ('Child Thread') child = Thread (target = mt) child.start () print ('Executing name name:', current_thread ( ) .getName ())

Výkon:

MainThread Child Thread Vykonávajúci názov vlákna: MainThread

Vyššie uvedený výstup ukazuje, že prvé vlákno, ktoré je prítomné, je hlavné vlákno. Toto hlavné vlákno potom vytvorí podradené vlákno, ktoré vykonáva funkciu, a potom sa konečné vláknové vyhlásenie znova vykoná hlavným vláknom.

Teraz poďme ďalej a uvidíme, ako urobiť Multithreading v pythone rozšírením triedy Thread.

Rozšírením triedy Thread:

Keď je podradená trieda vytvorená rozšírením triedy Thread, podradená trieda predstavuje, že nové vlákno vykonáva určitú úlohu. Pri rozširovaní triedy Thread môže podradená trieda prepísať iba dve metódy, t. J. Metódu __init __ () a metódu run (). Žiadnu inú metódu nemožno prepísať okrem týchto dvoch metód.

Tu je príklad toho, ako rozšíriť triedu vlákna na vytvorenie vlákna:

Príklad:

importovať vlákna importovať časovú triedu mythread (threading.Thread): def run (self): for x in range (7): print ('Hi from child') a = mythread () a.start () a.join () print („Ahoj od“, current_thread (). GetName ())

Výkon:
Ahoj od dieťaťa
Ahoj od dieťaťa
Ahoj od dieťaťa
Ahoj od dieťaťa
Ahoj od dieťaťa
Ahoj od dieťaťa
Ahoj od dieťaťa
Ahoj z MainThread

Vyššie uvedený príklad ukazuje, že trieda myclass dedí triedu Thread a podradená trieda, tj. Myclass je nadradená metóde run. V predvolenom nastavení musí byť prvý parameter ľubovoľnej funkcie triedy vlastný, čo je ukazovateľ na aktuálny objekt. Výstup ukazuje, že podradené vlákno vykoná metódu run () a hlavné vlákno čaká na dokončenie podradeného vlákna. Je to kvôli funkcii join (), vďaka ktorej hlavné vlákno čaká, kým dieťa dokončí prácu.

Táto metóda vytvárania vlákien je najpreferovanejšou metódou, pretože je to štandardná metóda. Ale v prípade, že chcete vytvárať vlákna bez zdedenia alebo rozšírenia triedy Thread, môžete to urobiť nasledujúcim spôsobom.

Bez triedy rozšírenia vlákna

Ak chcete vytvoriť vlákno bez rozšírenia triedy Thread, môžete postupovať takto:
Príklad:

from threading import * class ex: def myfunc (self): #self needed as first parameter in a class func for x in range (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('hotovo')

Výkon:

Dieťa
Dieťa
Dieťa
Dieťa
Dieťa
Dieťa
Dieťa
hotový

Podradené vlákno vykoná myfunc, potom hlavné vlákno vykoná posledné tlačové vyhlásenie.

Výhody použitia závitov

Multithreading má mnoho výhod, z ktorých niektoré sú nasledujúce:

  • Lepšie využitie zdrojov
  • Zjednodušuje kód
  • Umožňuje súbežný a paralelný výskyt rôznych úloh
  • Znižuje časovú náročnosť alebo reakčný čas, čím zvyšuje výkon.

Tu je príklad na kontrolu, ako dlho trvá spustenie kódu s alebo bez multithreadingu v pythone:

 Príklad: 
čas importu def sqr (n): pre x v n: time.sleep (1) x% 2 def kocka (n): pre x v n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) kocka (n) e = time.time () tlač (y)

Výkon:

16.042309284210205

Vyššie uvedené je výstupný čas potrebný na vykonanie programu bez použitia vlákien. Teraz použijeme vlákna a uvidíme, čo sa stane s rovnakým programom:

Príklad:

import vlákna z vlákna import * čas importu def sqr (n): pre x v n: time.sleep (1) print ('Zvyšok po vydelení 2', x% 2) def kocka (n): pre x v n: time.sleep (1) print ('Zvyšok po vydelení 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = vlákno ( target = sqr, args = (n,)) t2 = vlákno (target = kocka, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () print (end-start)
Výkon: 9.040220737457275

Vyššie uvedený výstup jasne ukazuje, že čas potrebný na použitie vlákien je oveľa kratší v porovnaní s časom potrebným na vykonanie toho istého programu bez použitia vlákien.

Dúfam, že máte jasno v konceptoch zahrnutých v tomto článku týkajúcich sa multithreadingu v Pythone. Uistite sa, že cvičíte čo najviac, pretože toto je jeden z najdôležitejších konceptov používaných v programovaní.

Máte na nás otázku? Uveďte to, prosím, v sekcii komentárov v tomto blogu „Multithreading v Pythone“ a my bude ozvite sa čo najskôr.

Ak chcete získať podrobné informácie o Pythone a jeho rôznych aplikáciách, môžete sa zaregistrovať naživo s nepretržitou podporou a doživotným prístupom.