> Как параллелить выполнение функции в Python (Python)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Сбер
Стек: Python
> Пример ответа
Для параллельного выполнения функций в Python можно использовать несколько подходов в зависимости от задачи:
- Модуль
threading- для I/O-bound задач (сеть, диски). Создаёте потоки, которые выполняют функции параллельно, но из-за GIL не ускоряют CPU-bound код.
PYTHONimport threadingdef 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()
- Модуль
multiprocessing- для CPU-bound задач. Создаёт отдельные процессы, обходя GIL.
PYTHONfrom multiprocessing import Processdef heavy_calc(x):return x ** 2processes = [Process(target=heavy_calc, args=(i,)) for i in range(4)]for p in processes: p.start()for p in processes: p.join()
concurrent.futures- высокоуровневый интерфейс для пулов потоков/процессов.
PYTHONfrom concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutorwith ThreadPoolExecutor(max_workers=4) as executor:results = list(executor.map(worker, range(4)))
asyncio- для асинхронного I/O, когда функции ожидают внешние ресурсы (запросы, БД). Использует корутины и event loop.
PYTHONimport asyncioasync 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.
> Похожие задачи по backend
Какие типы данных существуют в Python
Что должно присутствовать у объекта, чтобы он был итератором в Python
Как вывести в одном датафрейме результаты по студентам с баллами по математике и биологии ниже 80
Как посчитать возраст в годах между текущей датой и датой рождения в Python
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью