Как синхронизировать потоки в Python
Python
Middle
Без компании
Как синхронизировать потоки в Python
Ответы
Для синхронизации потоков в Python используйте модуль `threading` с примитивами синхронизации:
- **Lock** – базовый мьютекс:
```
import threading
lock = threading.Lock()
def safe_increment():
with lock:
# Критическая секция
global counter
counter += 1
```
- **RLock** – реентерабельный лок (позволяет повторно захватывать тот же поток):
```
rlock = threading.RLock()
```
- **Semaphore** – ограничивает количество потоков в критической секции:
```
sem = threading.Semaphore(3) # Макс 3 потока
```
- **Event** – механизм оповещения между потоками:
```
event = threading.Event()
event.wait() # Блокировка до event.set()
```
- **Condition** – более сложная синхронизация с wait/notify:
```
cond = threading.Condition()
with cond:
cond.wait() # Ожидание notify()
```
Важно: GIL (Global Interpreter Lock) в CPython не заменяет необходимость синхронизации при работе с общими данными! Для CPU-bound задач лучше использовать `multiprocessing`.