import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from typing import List
def cpu_heavy_task(n: int) -> int:
"""Имитация тяжёлой CPU-задачи (вычисление суммы квадратов)."""
return sum(i * i for i in range(n))
def run_sequential(numbers: List[int]) -> List[int]:
"""Последовательное выполнение (медленно)."""
return [cpu_heavy_task(n) for n in numbers]
def run_parallel(numbers: List[int], max_workers: int = 4) -> List[int]:
"""Параллельное выполнение с ThreadPoolExecutor."""
results = []
with ThreadPoolExecutor(max_workers=max_workers) as executor:
future_to_n = {executor.submit(cpu_heavy_task, n): n for n in numbers}
for future in as_completed(future_to_n):
try:
results.append(future.result())
except Exception as e:
print(f"Ошибка в задаче {future_to_n[future]}: {e}")
return results
if __name__ == "__main__":
try:
numbers = [300_000, 400_000, 500_000, 600_000]
print("⏱️ Последовательно:")
start = time.time()
seq_result = run_sequential(numbers)
print(f"Время: {time.time() - start:.2f} сек | Результаты: {seq_result[:2]}...\n")
print("⚡ Параллельно (4 потока):")
start = time.time()
par_result = run_parallel(numbers)
print(f"Время: {time.time() - start:.2f} сек | Результаты: {par_result[:2]}...")
print("\n✅ В параллельном режиме значительно быстрее!")
except Exception as e:
print(f"Ошибка: {e}")
📌 concurrent.futures.ThreadPoolExecutor и ProcessPoolExecutor позволяют легко запускать задачи параллельно. Используйте as_completed(), чтобы получать результаты по мере готовности, и контекстный менеджер — чтобы не забыть закрыть пул. Отлично для IO-bound задач (ThreadPool) и CPU-bound задач (ProcessPool).
Подпишись 👉🏻 @KodduuPython 🤖