При каких условиях поток отпускает GIL в Python
Python
Senior
Билайн
При каких условиях поток отпускает GIL в Python
Ответы
GIL (Global Interpreter Lock) отпускается в нескольких случаях, что позволяет другим потокам выполняться:
- **При выполнении I/O операций** – чтение/запись файлов, сетевые запросы и т.д.
```
with open('file.txt', 'r') as f: # GIL отпускается при чтении файла
data = f.read()
```
- **При вызове C-расширений** – если расширение явно отпускает GIL (например, NumPy или cryptography).
- **Во время `sleep`** – при вызове `time.sleep()` поток освобождает GIL.
```
import time
time.sleep(1) # GIL отпускается
```
- **При операциях с блокировками** – например, при использовании `threading.Lock`.
GIL не отпускается при чисто вычислительных операциях (например, циклы, арифметика), что ограничивает параллелизм в CPU-bound задачах. Для их распараллеливания лучше использовать `multiprocessing`.