Wielowątkowość to technika programowania, która pozwala na równoczesne wykonywanie kilku zadań, co może znacząco zwiększyć wydajność aplikacji, szczególnie tych, które wymagają dużej ilości operacji wejścia/wyjścia lub muszą przetwarzać duże ilości danych równolegle. Python oferuje kilka sposobów na implementację wielowątkowości, a jednym z najpopularniejszych jest moduł threading
.
Przykład kodu
W poniższym przykładzie przedstawiono, jak można użyć modułu threading
do wykonania dwóch zadań równolegle:
import threading
import time
# Funkcja symulująca zadanie obliczeniowe
def calculate_primes():
# Wyświetlenie komunikatu o rozpoczęciu zadania
print("Rozpoczynam obliczanie liczb pierwszych")
primes = []
for possiblePrime in range(2, 10000):
isPrime = True
for num in range(2, int(possiblePrime ** 0.5) + 1):
if possiblePrime % num == 0:
isPrime = False
break
if isPrime:
primes.append(possiblePrime)
print("Zakończono obliczanie liczb pierwszych")
# Funkcja symulująca zadanie wejścia/wyjścia
def simulate_io_task():
# Wyświetlenie komunikatu o rozpoczęciu zadania
print("Rozpoczynam symulację zadania I/O")
time.sleep(5) # Symulacja długiego zadania I/O
print("Zakończono symulację zadania I/O")
# Utworzenie wątków
thread1 = threading.Thread(target=calculate_primes)
thread2 = threading.Thread(target=simulate_io_task)
# Uruchomienie wątków
thread1.start()
thread2.start()
# Oczekiwanie na zakończenie wątków
thread1.join()
thread2.join()
print("Wszystkie zadania zostały zakończone.")
- Definiujemy dwie funkcje:
calculate_primes
do symulacji zadania obliczeniowego (w tym przypadku znajdowanie liczb pierwszych) isimulate_io_task
do symulacji długiego zadania wejścia/wyjścia (tutaj używamytime.sleep
). - Tworzymy dwa wątki,
thread1
ithread2
, przekazując im jako cel (target
) odpowiednio funkcjecalculate_primes
isimulate_io_task
. - Uruchamiamy wątki za pomocą metody
.start()
. - Używamy metody
.join()
na każdym wątku, aby poczekać, aż oba zakończą swoje działanie. - Na koniec wyświetlamy komunikat o zakończeniu wszystkich zadań.
Podsumowanie
Wielowątkowość w Pythonie za pomocą modułu threading
pozwala na efektywne wykonywanie wielu zadań równolegle, co jest szczególnie przydatne w aplikacjach o dużym obciążeniu lub wymagających intensywnych obliczeń. Pamiętaj jednak o potencjalnych problemach związanych z bezpieczeństwem wątków i dostępem do zasobów, które mogą wymagać stosowania mechanizmów synchronizacji, takich jak blokady.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.