Jak osiągnąć wielowątkowość w Pythonie?

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) i simulate_io_task do symulacji długiego zadania wejścia/wyjścia (tutaj używamy time.sleep).
  • Tworzymy dwa wątki, thread1 i thread2, przekazując im jako cel (target) odpowiednio funkcje calculate_primes i simulate_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.

Scroll to Top