При каких операциях Python всегда отпускает GIL
Python
Middle
Без компании
При каких операциях Python всегда отпускает GIL
Ответы
GIL (Global Interpreter Lock) в Python отпускается в следующих случаях:
- **I/O операции** – чтение/запись файлов, сетевые запросы (socket, HTTP и т.д.).
- **Системные вызовы** – например, `time.sleep()`.
- **Вызовы C-расширений** – если расширение явно отпускает GIL (например, NumPy, Cython с `nogil`).
- **Операции, выполняемые в другом потоке** – например, в `threading.Thread`.
Пример с `time.sleep()`:
```
import time
import threading
def worker():
print("GIL отпущен на время sleep")
time.sleep(1) # GIL отпущен
print("GIL снова захвачен")
t = threading.Thread(target=worker)
t.start()
t.join()
```
GIL не отпускается при чисто вычислительных операциях (например, циклы на чистом Python), поэтому для CPU-задач лучше использовать `multiprocessing`.