> Как параллелить выполнение функции в Python (Python)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Сбер

Стек: Python

> Пример ответа

Для параллельного выполнения функций в Python можно использовать несколько подходов в зависимости от задачи:

  1. Модуль threading - для I/O-bound задач (сеть, диски). Создаёте потоки, которые выполняют функции параллельно, но из-за GIL не ускоряют CPU-bound код.
PYTHON
import threading
def worker(name):
print(f"Поток {name} работает")
threads = [threading.Thread(target=worker, args=(i,)) for i in range(4)]
for t in threads: t.start()
for t in threads: t.join()
  1. Модуль multiprocessing - для CPU-bound задач. Создаёт отдельные процессы, обходя GIL.
PYTHON
from multiprocessing import Process
def heavy_calc(x):
return x ** 2
processes = [Process(target=heavy_calc, args=(i,)) for i in range(4)]
for p in processes: p.start()
for p in processes: p.join()
  1. concurrent.futures - высокоуровневый интерфейс для пулов потоков/процессов.
PYTHON
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
with ThreadPoolExecutor(max_workers=4) as executor:
results = list(executor.map(worker, range(4)))
  1. asyncio - для асинхронного I/O, когда функции ожидают внешние ресурсы (запросы, БД). Использует корутины и event loop.
PYTHON
import asyncio
async def fetch_data(url):
await asyncio.sleep(1)
return f"Данные из {url}"
async def main():
tasks = [fetch_data(f"url{i}") for i in range(3)]
results = await asyncio.gather(*tasks)
asyncio.run(main())

Выбор: для I/O - threading или asyncio; для CPU - multiprocessing или ProcessPoolExecutor. Если нужно просто распараллелить вызовы без сложного управления, используйте concurrent.futures.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью