422.31K

GIL

1.

Что такое GIL?
Как он влияет на многопоточность в Python?
Подготовили: Лузин Даниэль и Телегин Богдан

2.

Что же такое GIL
GIL - это мьютекс, который действует как ограничитель,
позволяющий только одному потоку выполнять байткод Python в
один момент времени.

3.

Пример №1
Да, создается 2 потока, но в
один момент времени выполняется
только ОДИН!

4.

Пример №2
В этом примере мы создаем два
потока для вывода чисел и букв.
Обратите внимание, что
блокировка GIL НЕ ВЛИЯЕТ на
этот пример, так как он
включает ожидание вывода на
экране (print), что является
операцией ввода-вывода.

5.

Пример №3
В этом примере два потока
пытаются инкрементировать общий
счетчик counter. Вследствие
блокировки GIL, результат этой
операции может быть
НЕОПРЕДЕЛЕННЫМ и зависит от
того, какой поток получит
доступ к счетчику в данный
момент.

6.

Почему он вообще есть тогда
Python создавался с упором на простоту и удобство разработки.
● Списки и словари могут быть изменены в процессе
выполнения
=> Если будет выполняться в многопотоке – нестабильная работа
(в других языках это решается тем, что такие структуры данных
неизменяемы в процессе итерации по ним)

7.

Как обойти GIL
Для CPU-bound задач
Для I/O-bound задач
- используем multiprocessing
- асинхронное выполнение
(asyncio)
Потому что на каждый процесс
есть отдельный интерпретатор,
т.е. свой GIL на каждый
процесс
Перекладываем выполнение кода
с потоков на задачи

8.

Заключение
GIL - это особенность интерпретатора Python, которая
ограничивает одновременное выполнение нескольких потоков
Python-кода в одном процессе. Это ограничение может стать
вызовом для разработчиков, особенно тех, кто сталкивается с
многозадачностью и параллельной обработкой данных.
English     Русский Rules