Hardmultiprocessing

Что такое multiprocessing?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

multiprocessing — параллелизм через процессы, обход GIL. Каждый процесс — отдельный Python interpreter с собственным GIL, memory. Настоящий параллелизм для CPU-bound.

from multiprocessing import Pool

def square(x):
    return x * x

if __name__ == '__main__':
    with Pool(4) as pool:
        results = pool.map(square, range(100))   # блокирующий

    # map_async, apply, apply_async, starmap, imap_unordered
  • Communication: Queue, Pipe, Value/Array (shared memory), Manager (proxy для dict/list);
  • Synchronization: Lock, RLock, Semaphore, Event, Condition;
  • spawn (Windows, +Linux с 3.14) — перезапуск Python, import-time code выполняется; fork (Linux по умолчанию) — быстрее, но проблемы с threads/locks;
  • mp.get_context('spawn') — явно;
  • SharedMemory (3.8) — эффективный shared memory без pickle overhead;
  • Стоимость выше, чем threads (запуск, IPC pickle).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.