Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Что такое многопроцессность и чем она отличается от многопоточности?

Вопрос проверяет понимание различий между моделями параллелизма — процессами и потоками, а также ограничений интерпретатора Python (GIL) и выбора подходящей модели для CPU- или IO-задач.

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

Многопроцессность использует несколько независимых процессов, каждый со своей памятью, что позволяет выполнять код параллельно на разных ядрах CPU.
Многопоточность использует несколько потоков внутри одного процесса, но они разделяют память и в CPython ограничены GIL — только один поток выполняет Python-байткод в момент времени.
Процессы подходят для CPU-интенсивных задач, где важна настоящая параллельность. Потоки удобны для IO-операций (файлы, сеть), где основная часть времени — ожидание.
Выбор между ними зависит от характера задачи: CPU → процессы, IO → потоки.

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

Понимание многопроцессности и многопоточности важно для правильного выбора модели параллелизма в Python.

1. Определения

Определение:
Многопроцессность — выполнение программы несколькими независимыми процессами, каждый из которых имеет собственное адресное пространство и выполняется параллельно на разных ядрах.

Определение:
Многопоточность — выполнение программы несколькими потоками внутри одного процесса, использующими общую память и ресурсы.


2. Отличия моделей

2.1. Изоляция памяти

  • процессы изолированы;

  • потоки делят общую память → нужны блокировки (Lock, RLock).

2.2. Работа на нескольких ядрах

  • процессы работают параллельно на нескольких ядрах;

  • потоки в CPython выполняются по очереди из-за GIL (но могут параллелить IO).

2.3. Накладные расходы

  • процессы тяжелее: запуск дольше, межпроцессное взаимодействие сложнее (Queue, Pipe);

  • потоки лёгкие и быстрые, но сложнее для безопасной работы с общей памятью.

2.4. Где применять

  • CPU-heavy задачи:

    • обработка изображений,

    • машинное обучение,

    • криптография
      → многопроцессность (multiprocessing).

  • IO-heavy задачи:

    • сетевые вызовы,

    • работа с файлами,

    • ожидание API
      → многопоточность (threading).


3. Пример разницы

Пример многопроцессности:

from multiprocessing import Pool

def calc(x):
    return x * x

with Pool(4) as p:
    print(p.map(calc, range(10)))

Пример многопоточности:

import threading
import time

def task():
    time.sleep(1)

threads = [threading.Thread(target=task) for _ in range(5)]
for t in threads: t.start()
for t in threads: t.join()

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

  • Многопроцессность даёт настоящую параллельность.

  • Многопоточность эффективна для IO-запросов.

  • В CPython GIL ограничивает потоки, но не влияет на процессы.

  • Выбор зависит от характера нагрузки

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • Python

    Python

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

#multiprocessing

#threading

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.