При каких условиях поток отпускает 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`.