Встречается на собеседованиях • сегодня
Как сделать параллельное исполнение потоков при наличии GIL в Python
В Python GIL (Global Interpreter Lock) ограничивает параллельное выполнение потоков для CPU-задач, но можно использовать несколько подходов для обхода этого ограничения:
- Мультипроцессинг (модуль
multiprocessing):Каждый процесс имеет свой GIL, что позволяет использовать несколько ядер CPU.pythonfrom multiprocessing import Pool def task(x): return x * x if __name__ == '__main__': with Pool(4) as p: print(p.map(task, [1, 2, 3, 4]))
-
Асинхронность (модуль
asyncio):pythonimport asyncio async def task(): await asyncio.sleep(1) print("Done") async def main(): await asyncio.gather(task(), task(), task()) asyncio.run(main())Подходит для I/O-bound задач, но не для CPU-bound.
-
C-расширения (например,
numpy,Cython):
Выносят CPU-задачи в код без GIL. -
Потоки для I/O-bound задач (модуль
threading):pythonimport threading def task(): print("Running in thread") threads = [threading.Thread(target=task) for _ in range(4)] for t in threads: t.start() for t in threads: t.join()Потоки полезны при ожидании I/O, так как GIL отпускается во время блокирующих операций.
Выбор метода зависит от типа задачи (CPU-bound или I/O-bound).

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы