Какие библиотеки для многопоточности существуют в Python
Что проверяют
Спрашивают не список модулей, а понимаете ли вы, что в обычной сборке CPython потоки не ускоряют вычисления. Хороший ответ строится вокруг GIL и разделения задач на IO-bound и CPU-bound. Продолжение предсказуемое: что изменилось со свободнопоточной сборкой и чем threading отличается от multiprocessing по цене запуска.
Как отвечать
- threading: потоки операционной системы,
Thread, примитивыLock,RLock,Event,Semaphore. Годится для ожидания: на системных вызовах ввода-вывода GIL отпускается; - concurrent.futures: единый интерфейс над пулами,
ThreadPoolExecutorиProcessPoolExecutorс одинаковымиsubmitиmapи объектамиFuture. У пула потоков по умолчаниюmin(32, os.cpu_count() + 4)рабочих; - multiprocessing: отдельные процессы со своей памятью, обмен через
Queue,Pipe,shared_memory. Ответ на CPU-bound задачи. Помните про цену старта и сериализацию черезpickle, а также про способ запуска:spawnна Windows и macOS, а в Python 3.14forkserverстал умолчанием и на Linux; - asyncio: не потоки, а кооперативная многозадачность в одном потоке,
asyncиawait,TaskGroupначиная с 3.11,asyncio.to_threadдля блокирующих вызовов; - queue: потокобезопасные очереди для схемы производитель и потребитель.
Отдельно про состояние GIL к 2026 году: свободнопоточная сборка (PEP 703) появилась в 3.13 экспериментально, а в 3.14 получила официальную поддержку и ставится отдельным исполняемым файлом с суффиксом t. Потоки там считают параллельно, но однопоточный код может быть чуть медленнее, и не все C-расширения готовы. Рядом стоят субинтерпретаторы со своим GIL на каждый: модуль concurrent.interpreters и InterpreterPoolExecutor в 3.14.
Где спотыкаются
Обещают ускорение перебора чисел через threading. На обычной сборке пять потоков посчитают то же самое не быстрее, а медленнее из-за переключений.
Называют asyncio библиотекой многопоточности. Это один поток, и любой блокирующий вызов внутри корутины останавливает весь цикл событий.
Отвечают «GIL мешает, берите процессы», не уточнив характер задачи. Для сетевых запросов процессы это лишняя память и сериализация без выигрыша.