Co je Mutithreading v Pythonu a jak jej dosáhnout?



Zjistěte, co je multitasking v pythonu. Vysvětluje také multithreading, jak vytvořit vlákna bez vytvoření třídy, rozšířením třídy Thread a bez jejího rozšíření.

Čas je nejdůležitějším faktorem v životě. Svět programování díky své důležitosti poskytuje různé triky a techniky, které vám významně pomohou snížit časovou náročnost a tím zvýšit výkon. Jedním z takových přístupů je Multithreading v Pythonu, což je jeden z nejdůležitějších konceptů zahrnutých pod .

Zde je stručný souhrn všech velkých společností zahrnutých v tomto článku:





Co je multitasking v Pythonu?
Co je to vlákno?
Co je multithreading v pythonu?
Kdy použít multithreading v Pythonu?
Jak dosáhnout multithreading v Pythonu?
Jak vytvořit vlákna v Pythonu?

Výhody používání multithreadingu v Pythonu



Nejprve se pokusíme porozumět multitaskingu, než se začneme učit o multithreadingu v Pythonu.

Co je to multitasking v Pythonu?

Multitasking je obecně schopnost provádět více úkolů současně. Z technického hlediska multitasking označuje schopnost operačního systému provádět různé úkoly současně. Například , stahujete něco do počítače, posloucháte písničky a souběžně hrajete hry atd. Všechny tyto úkoly jsou synchronizovány stejným operačním systémem. Není to nic jiného než multitasking, který vám nejen pomáhá šetřit čas, ale také zvyšuje produktivitu.

V operačním systému existují dva typy multitaskingu:



  • Procesní
  • Na základě vlákna

keyerror: 'a'

V tomto článku se dozvíte něco o Na základě vlákna multitasking nebo Multithreading .

Co je to vlákno?

threads-multithreading v python-edurekaVlákno je v podstatě nezávislý průběh exekuce. Jeden proces se může skládat z více vláken. Každé vlákno v programu provádí určitý úkol. Například, hrajete-li na svém počítači hru FIFA, je hra jako celek jediným procesem , ale skládá se z několika podprocesů odpovědných za přehrávání hudby, přijímání vstupů od uživatele, synchronní běh soupeře atd. To vše jsou samostatná podprocesy odpovědné za provádění těchto různých úkolů ve stejném programu.

Každý proces má jedno vlákno, které je vždy spuštěno. Toto je hlavní vlákno. Toto hlavní vlákno ve skutečnosti vytváří objekty podřízeného vlákna. Podřízené vlákno je také iniciováno hlavním vláknem. V tomto článku vám dále ukážu, jak zkontrolovat aktuální běžící vlákno.

Doufám tedy, že jste jasně pochopili, co je vlákno. Pokračujeme, podívejme se, co je Multithreading v Pythonu.

Kdy použít Multithreading v Pythonu?

Vícevláknové zpracování je velmi užitečné pro úsporu času a zlepšení výkonu, ale nelze jej použít všude.
V předchozím příkladu FIFA je hudební vlákno nezávislé na vláknu, které bere váš vstup, a vlákno, které bere váš vstup, je nezávislé na vláknu, které spouští vašeho soupeře. Tato vlákna běží nezávisle, protože nejsou vzájemně závislá.

Multithreading lze tedy použít pouze v případě, že neexistuje závislost mezi jednotlivými vlákny.

Tento článek dále ukazuje, jak můžete dosáhnout multithreadingu v Pythonu.

Jak dosáhnout multithreading v Pythonu?

Multithreading v Pythonu lze dosáhnout importem závitování modul.

Před importem tohoto modulu jej budete muset nainstalovat. Chcete-li to nainstalovat do svého prostředí anakondy, spusťte na příkazovém řádku anakondy následující příkaz:

conda install -c conda-forge tbb

Po jeho úspěšné instalaci můžete použít kterýkoli z následujících příkazů k importu modulu vláken:

import vlákna z vlákna import *

Nyní, když máte nainstalovaný modul vláken, pojďme se pohnout kupředu a udělat Multithreading v Pythonu.

Jak vytvořit vlákna v Pythonu?


Vlákna v Pythonu lze vytvořit třemi způsoby:

  1. Bez vytvoření třídy
  2. Rozšířením třídy Thread
  3. Bez rozšíření třídy Thread

Bez vytvoření třídy

Multithreading v Pythonu lze dosáhnout i bez vytvoření třídy. Zde je příklad, který ukazuje to samé:

Příklad:

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

Výstup:

MainThread Child Thread Provádějící název vlákna: MainThread

Výše uvedený výstup ukazuje, že první podproces, který je přítomen, je hlavní podproces. Toto hlavní vlákno poté vytvoří podřízené vlákno, které provádí funkci, a poté se konečný příkaz tisku znovu provede hlavním vláknem.

Nyní pojďme posunout vpřed a uvidíme, jak to udělat Multithreading v pythonu rozšířením třídy Thread.

Rozšířením třídy Thread:

Když je podřízená třída vytvořena rozšířením Thread třídy, podřízená třída představuje, že nové vlákno provádí nějaký úkol. Při rozšiřování třídy Thread může podřízená třída přepsat pouze dvě metody, tj. Metodu __init __ () a metodu run (). Nelze přepsat žádnou jinou metodu než tyto dvě metody.

Zde je příklad, jak rozšířit třídu Thread tak, aby vytvořila vlákno:

Příklad:

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 ('Ahoj od', current_thread (). GetName ())

Výstup:
Ahoj od dítěte
Ahoj od dítěte
Ahoj od dítěte
Ahoj od dítěte
Ahoj od dítěte
Ahoj od dítěte
Ahoj od dítěte
Ahoj z MainThread

Výše uvedený příklad ukazuje, že třída myclass dědí třídu Thread a podřízená třída, tj. Myclass přepisuje metodu run. Ve výchozím nastavení musí být první parametr jakékoli funkce třídy vlastní, což je ukazatel na aktuální objekt. Výstup ukazuje, že podřízené vlákno provede metodu run () a hlavní vlákno čeká na dokončení podřízeného spuštění. Důvodem je funkce join (), díky které hlavní vlákno čeká na dokončení dítěte.

Tato metoda vytváření vláken je nejpreferovanější metodou, protože jde o standardní metodu. Ale v případě, že chcete vytvořit vlákna bez zdědění nebo rozšíření třídy Thread, můžete to udělat následujícím způsobem.

Bez třídy rozšíření vlákna

Chcete-li vytvořit vlákno bez rozšíření třídy Thread, můžete postupovat takto:
Příklad:

from threading import * class ex: def myfunc (self): #self necessary 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ýstup:

Dítě
Dítě
Dítě
Dítě
Dítě
Dítě
Dítě
Hotovo

Podřízené vlákno provede myfunc, po kterém hlavní vlákno provede poslední tiskový příkaz.

Výhody použití závitů

Vícevláknové zpracování má mnoho výhod, z nichž některé jsou následující:

  • Lepší využití zdrojů
  • Zjednodušuje kód
  • Umožňuje souběžný a paralelní výskyt různých úkolů
  • Snižuje časovou náročnost nebo dobu odezvy, čímž zvyšuje výkon.

Zde je příklad, jak zkontrolovat, jak dlouho trvá spuštění kódu s multithreadingem a bez něj v pythonu:

 Příklad: 
čas importu def sqr (n): pro x v n: time.sleep (1) x% 2 def cube (n): pro x in n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) krychle (n) e = time.time () tisk (y)

Výstup:

16.042309284210205

Výše uvedený je výstupní čas potřebný k provedení programu bez použití vláken. Nyní pojďme použít vlákna a uvidíme, co se stane se stejným programem:

Příklad:

import threading from threading import * import time def sqr (n): for x in n: time.sleep (1) print ('Remainder after dividing by 2', x% 2) def cube (n): for x in n: time.sleep (1) print ('Zbytek po dělení 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 = krychle, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () print (end-start)
Výstup: 9.040220737457275

Výše uvedený výstup jasně ukazuje, že doba potřebná při použití podprocesů je mnohem kratší ve srovnání s dobou potřebnou k provedení stejného programu bez použití podprocesů.

Doufám, že máte jasno v pojmech obsažených v tomto článku, které se týkají Multithreading v Pythonu. Ujistěte se, že cvičíte co nejvíce, protože toto je jeden z nejdůležitějších konceptů používaných v programování.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto blogu „Multithreading v Pythonu“ a my vůle ozvu se co nejdříve.

Chcete-li získat podrobné znalosti o Pythonu a jeho různých aplikacích, můžete se zaregistrovat naživo s nepřetržitou podporou a doživotním přístupem.