Как можно синхронизировать объекты в многопроцессорной среде в Python
Python
Middle
Т-Банк
Как можно синхронизировать объекты в многопроцессорной среде в Python
Ответы
Для синхронизации объектов в многопроцессорной среде в Python можно использовать:
- **Lock (Блокировки)** – базовый механизм для защиты критических секций:
```
from multiprocessing import Lock, Process
lock = Lock()
def worker(lock):
with lock:
print("Критическая секция защищена")
```
- **Semaphore** – ограничивает количество процессов в критической секции:
```
from multiprocessing import Semaphore
sem = Semaphore(2) # Максимум 2 процесса одновременно
```
- **Очереди (Queue)** – потокобезопасный обмен данными:
```
from multiprocessing import Queue
q = Queue()
q.put("данные")
```
- **Менеджеры (Manager)** – общие объекты между процессами:
```
from multiprocessing import Manager
manager = Manager()
shared_dict = manager.dict()
```
- **Value/Array** – разделяемая память:
```
from multiprocessing import Value, Array
counter = Value('i', 0) # 'i' – тип integer
```
**Важно:**
- Для CPU-bound задач лучше использовать `multiprocessing`, а не `threading`.
- Блокировки могут привести к deadlock, если не освобождаются.
- Очереди и менеджеры добавляют накладные расходы.