Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: cpu, bound, multiprocessing

Какие альтернативы существуют для выполнения CPU-bound задач?

Вопрос проверяет понимание альтернатив потокам в Python и умение выбирать корректный инструмент для вычислительно нагруженных задач.

Короткий ответ

Для CPU-bound задач чаще всего используют несколько процессов вместо потоков. Также применяют нативные библиотеки, которые выполняют вычисления вне Python и освобождают GIL. В некоторых случаях задачи выносят в отдельные сервисы или очереди фоновых задач. Выбор зависит от объёма вычислений и архитектуры системы.

Длинный ответ

Определение

CPU-bound задачи — это задачи, в которых основное время тратится на вычисления, а не на ожидание ввода-вывода.

Так как потоки в CPython ограничены GIL, применяются другие подходы.

Многопроцессный параллелизм

Самый распространённый и понятный вариант.

Как работает

Каждый процесс:

  • имеет собственный интерпретатор

  • имеет собственный GIL

  • может выполняться на отдельном ядре CPU

Пример с multiprocessing:

from multiprocessing import Process

def work():
    total = 0
    for i in range(10_000_000):
        total += i

processes = [Process(target=work) for _ in range(4)]
for p in processes: p.start()
for p in processes: p.join()

Особенности:

  • реальный параллелизм

  • высокая стоимость создания процессов

  • необходимость сериализации данных (pickle)


ProcessPoolExecutor

Более удобная абстракция поверх multiprocessing.

from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor() as pool:
    pool.map(work, range(4))

Подходит для:

  • batch-вычислений

  • CPU-интенсивных фоновых задач


Нативные библиотеки (C/C++)

Многие библиотеки:

  • выполняют код вне Python

  • временно освобождают GIL

Примеры:

  • NumPy

  • SciPy

  • OpenCV

import numpy as np

arr = np.random.rand(10_000_000)
result = np.sum(arr)

Здесь вычисления происходят в C, а не в Python-цикле.


Очереди задач и воркеры

Для больших систем часто применяют:

  1. очередь задач

  2. пул воркеров

  3. асинхронную обработку

Примеры:

  • Celery

  • RQ

  • кастомные worker-сервисы

Это позволяет:

  • масштабировать вычисления горизонтально

  • изолировать тяжёлые задачи


Краткий вывод

Для CPU-bound задач в Python используют процессы, нативные библиотеки или вынос вычислений во внешние воркеры. Потоки для этой цели почти всегда неэффективны.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#cpu

#bound

#multiprocessing

Подпишись на Python Developer в телеграм