(Py) Moduł Threading / Concurrent.futures*

Moduł Threading

  • Moduł Threading umożliwia utworzenie wielu wątków. Należy pamiętać przy tym, że wątki nie usprawniają działania programu wykonującego obliczenia wykorzystujące procesor CPU, a jedynie operację wymagające oczekiwania np. na odpowiedź serwera HTTP. Związku z tym moduł ten może być wykorzystywany do przyśpieszenia wielu operacji np. sieciowych, wykonywanych jednocześnie.

Przykładowe wykorzystanie modułu Threading

Przykładowe wykorzystanie modułu Threading:

import time
import threading

# Przykładowa funkcja czekająca określoną ilość czasu:
def new_def(seconds):
    time.sleep(seconds)
    print(f"Done in {seconds} second/s")


threads_list = [] # Lista wątków do uruchomienia.

# Pętla uruchamiająca poszczeólne wątki:
for _ in range(10):
    conftig_thread = threading.Thread(target=new_def, args=[1])
    conftig_thread.start()

# Pętla oczekująca na zakończenie wykonywania poszczeólnych wątków:
for thread in threads_list:
    thread.join()

Moduł Concurrent.futures

  • Moduł Concurrent.futures umożliwia utworzenie wielu wątków. Należy pamiętać przy tym, że wątki nie usprawniają działania programu wykonującego obliczenia wykorzystujące procesor CPU, a jedynie operację wymagające oczekiwania np. na odpowiedź serwera HTTP. Związku z tym moduł ten może być wykorzystywany do przyśpieszenia wielu operacji np. sieciowych, wykonywanych jednocześnie.

Przykładowe wykorzystanie modułu Concurrent.futures

Przykładowe wykorzystanie modułu Concurrent.futures:

import concurrent.futures
import time

# Przykładowa funkcja czekająca określoną ilość czasu:
def new_def(seconds):
    time.sleep(seconds)
    return "Done"

# Pętla uruchamiająca wątki:
with concurrent.futures.ThreadPoolExecutor() as executor:

    # Uruchomienie wątków w petli for 100 razy:
    results = [executor.submit(new_def, 1) for _ in range(100)]

    # Pętla zwracjaąca wynik uruchomiena funkcji "new_def":
    for f in concurrent.futures.as_completed(results):
        print(f.result())
Przykładowe wykorzystanie modułu Concurrent.futures + Map:

import concurrent.futures
import time

# Przykładowa funkcja czekająca określoną ilość czasu:
def new_def(seconds):
    time.sleep(seconds)
    print(f"Done in {seconds}")

# Pętla uruchamiająca wątki:
with concurrent.futures.ThreadPoolExecutor() as executor:

    # Lista zawiarająca operacje, zlecone do wykonania:
    seconds = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    # Uruchomienie wątków w petli for 10 razy:
    executor.map(new_def, seconds)

Pozostałe tematy związane z bibliotekami / modułami Python

Podstawowe

Rozszerzone

SQL

PyQt 5

Automatyzacja

Data Mining

PDFPRINT

Robert T Kucharski

Cisco Network Engineer in GPW.

Dodaj komentarz