Czas jest najważniejszym czynnikiem w życiu. Ze względu na swoją wagę świat programowania dostarcza rozmaitych sztuczek i technik, które w znaczący sposób pomagają zredukować czasochłonność, a tym samym zwiększyć wydajność. Jednym z takich podejść jest wielowątkowość w Pythonie, która jest jedną z najważniejszych koncepcji omówionych w .
Oto krótkie podsumowanie wszystkich głównych kierunków omówionych w tym artykule:
Co jest wielozadaniowość w Pythonie?
Co to jest nić?
Co to jest wielowątkowość w Pythonie?
Kiedy używać wielowątkowości w Pythonie?
Jak osiągnąć wielowątkowość w Pythonie?
Jak tworzyć wątki w Pythonie?
Zalety korzystania z wielowątkowości w Pythonie
Na początek spróbujmy najpierw zrozumieć wielozadaniowość, zanim zaczniemy uczyć się wielowątkowości w Pythonie.
Co to jest wielozadaniowość w Pythonie?
Ogólnie mówiąc, wielozadaniowość to możliwość wykonywania wielu zadań jednocześnie. Z technicznego punktu widzenia wielozadaniowość oznacza zdolność systemu operacyjnego do wykonywania różnych zadań w tym samym czasie. Na przykład , pobierasz coś na swój komputer, słuchasz piosenek i jednocześnie grasz w grę itp. Wszystkie te zadania są wykonywane przez ten sam system operacyjny i są zsynchronizowane. To nic innego jak wielozadaniowość, która nie tylko pomaga zaoszczędzić czas, ale także zwiększa produktywność.
Istnieją dwa rodzaje wielozadaniowości w systemie operacyjnym:
- Oparte na procesach
- Oparte na wątkach
W tym artykule dowiesz się o tym Oparte na wątkach wielozadaniowość lub Wielowątkowość .
Co to jest nić?
Wątek to w zasadzie plik niezależny przepływ egzekucji. Pojedynczy proces może składać się z wielu wątków. Każdy wątek w programie wykonuje określone zadanie. Na przykład, Kiedy grasz w grę, powiedzmy FIFA na komputerze, gra jako całość jest pojedynczym procesem , ale składa się z kilku wątków odpowiedzialnych za odtwarzanie muzyki, pobieranie danych wejściowych od użytkownika, synchroniczne uruchamianie przeciwnika itp. To wszystko są oddzielne wątki odpowiedzialne za wykonywanie tych różnych zadań w tym samym programie.
Każdy proces ma jeden wątek, który jest zawsze uruchomiony. To jest główny wątek. Ten główny wątek faktycznie tworzy obiekty wątku potomnego. Wątek potomny jest również inicjowany przez wątek główny. W dalszej części artykułu pokażę, jak sprawdzić aktualnie uruchomiony wątek.
podstawowe struktury danych w java
Mam więc nadzieję, że dzięki temu jasno zrozumieliście, czym jest nić. Przechodząc dalej, zobaczmy, czym jest wielowątkowość w Pythonie.
Kiedy używać wielowątkowości w Pythonie?
Wielowątkowość jest bardzo przydatna do oszczędzania czasu i poprawy wydajności, ale nie wszędzie można ją zastosować.
W poprzednim przykładzie FIFA wątek muzyczny jest niezależny od wątku, który przyjmuje twoje dane wejściowe, a wątek, który przyjmuje twoje dane wejściowe, jest niezależny od wątku, który uruchamia twojego przeciwnika. Te wątki działają niezależnie, ponieważ nie są od siebie zależne.
Dlatego wielowątkowość może być używana tylko wtedy, gdy nie istnieje zależność między poszczególnymi wątkami.
Ten artykuł dalej pokazuje, jak osiągnąć wielowątkowość w Pythonie.
Jak osiągnąć wielowątkowość w Pythonie?
Wielowątkowość w Pythonie można osiągnąć, importując plik gwintowanie moduł.
Przed zaimportowaniem tego modułu będziesz musiał go zainstalować. Aby zainstalować to w swoim środowisku anaconda, wykonaj następujące polecenie w wierszu polecenia anaconda:
conda install -c conda-forge tbb
Po pomyślnym zainstalowaniu modułu możesz użyć dowolnego z następujących poleceń, aby zaimportować moduł wątków:
import wątków z wątków import *
Teraz, gdy masz już zainstalowany moduł obsługi wątków, przejdźmy dalej i zróbmy wielowątkowość w Pythonie.
Jak tworzyć wątki w Pythonie?
Wątki w Pythonie można tworzyć na trzy sposoby:
- Bez tworzenia klasy
- Rozszerzając klasę Thread
- Bez rozszerzania klasy Thread
Bez tworzenia klasy
Wielowątkowość w Pythonie można również osiągnąć bez tworzenia klasy. Oto przykład pokazujący to samo:
Przykład:
z wątków import * print (current_thread (). getName ()) def mt (): print ('Wątek potomny') child = Thread (target = mt) child.start () print ('Wykonywanie nazwy wątku:', current_thread ( ) .getName ())
Wynik:
MainThread Wątek potomny Wykonywanie nazwy wątku: MainThread
Powyższe dane wyjściowe pokazują, że pierwszy obecny wątek jest wątkiem głównym. Ten główny wątek tworzy następnie wątek potomny, który wykonuje funkcję, a następnie końcowa instrukcja print jest ponownie wykonywana przez główny wątek.
Przejdźmy teraz dalej i zobaczmy, jak wykonać wielowątkowość w Pythonie, rozszerzając klasę Thread.
Rozszerzając klasę Thread:
Gdy klasa podrzędna jest tworzona przez rozszerzenie klasy Thread, klasa podrzędna reprezentuje, że nowy wątek wykonuje pewne zadanie. Rozszerzając klasę Thread, klasa potomna może przesłonić tylko dwie metody, tj. Metodę __init __ () i metodę run (). Żadna inna metoda nie może zostać zastąpiona inną niż te dwie metody.
Oto przykład, jak rozszerzyć klasę Thread, aby utworzyć wątek:
Przykład:
import wątków 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 („Żegnaj z”, current_thread (). GetName ())
Wynik:
Cześć od dziecka
Cześć od dziecka
Cześć od dziecka
Cześć od dziecka
Cześć od dziecka
Cześć od dziecka
Cześć od dziecka
Do widzenia z MainThread
Powyższy przykład pokazuje, że klasa myclass dziedziczy klasę Thread, a klasa potomna, czyli myclass przesłania metodę run. Domyślnie pierwszym parametrem dowolnej funkcji klasowej musi być self, czyli wskaźnik do bieżącego obiektu. Dane wyjściowe pokazują, że wątek podrzędny wykonuje metodę run (), a wątek główny czeka na zakończenie wykonania elementu podrzędnego. Dzieje się tak z powodu funkcji join (), która sprawia, że główny wątek czeka na zakończenie przez dziecko.
Ta metoda tworzenia wątków jest najbardziej preferowaną metodą, ponieważ jest to metoda standardowa. Ale jeśli chcesz tworzyć wątki bez dziedziczenia lub rozszerzania klasy Thread, możesz to zrobić w następujący sposób.
Bez rozszerzania klasy Thread
Aby utworzyć wątek bez rozszerzania klasy Thread, możesz wykonać następujące czynności:
Przykład:
z wątków import * class ex: def myfunc (self): #self konieczny jako pierwszy parametr w klasie func dla x w zakresie (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('done')
Wynik:
Dziecko
Dziecko
Dziecko
Dziecko
Dziecko
Dziecko
Dziecko
Gotowe
Zalety stosowania gwintowania
Wielowątkowość ma wiele zalet, z których niektóre są następujące:
- Lepsze wykorzystanie zasobów
- Upraszcza kod
- Umożliwia współbieżne i równoległe występowanie różnych zadań
- Zmniejsza zużycie czasu lub czas odpowiedzi, zwiększając tym samym wydajność.
Oto przykład, aby sprawdzić, ile czasu zajmuje wykonanie kodu z wielowątkowością i bez niej w Pythonie:
Przykład:
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)
Wynik:
16.042309284210205
Powyższe to czas wyjściowy potrzebny do wykonania programu bez użycia wątków. Teraz użyjmy wątków i zobaczmy, co stanie się z tym samym programem:
Przykład:
import wątków z wątków import * import time def sqr (n): for x in n: time.sleep (1) print ('Pozostałe po podzieleniu przez 2', x% 2) def cube (n): for x in n: time.sleep (1) print ('Pozostała po podzieleniu przez 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)Wynik: 9.040220737457275
Powyższe dane wyjściowe wyraźnie pokazują, że czas potrzebny, gdy używamy wątków, jest znacznie krótszy w porównaniu z czasem potrzebnym na wykonanie tego samego programu bez użycia wątków.
Mam nadzieję, że rozumiesz koncepcje omówione w tym artykule dotyczące wielowątkowości w Pythonie. Upewnij się, że ćwiczysz jak najwięcej, ponieważ jest to jedna z najważniejszych koncepcji używanych w programowaniu.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na blogu „Wielowątkowość w Pythonie”, a my będzie skontaktujemy się z Tobą tak szybko, jak to możliwe.
Aby uzyskać dogłębną wiedzę na temat języka Python i jego różnych aplikacji, możesz zarejestrować się na żywo z całodobowym wsparciem i dożywotnim dostępem.