Разделяемое состояние в многопроцессной среде
Python
Senior
Яндекс
Как можно организовать разделяемое состояние между процессами в Python, помимо передачи сообщений через очереди? Приведите пример использования `multiprocessing.Manager` или `shared_memory`.
Ответы
Shared state между процессами
Процессы не разделяют адресное пространство, поэтому нужно использовать межпроцессное взаимодействие.
Варианты:
- `multiprocessing.Manager` — прокси-объекты (list, dict), управляемые серверным процессом;
- `multiprocessing.Value`/`Array` — разделяемые C-структуры;
- `multiprocessing.shared_memory` (3.8+) — разделяемые буферы.
Пример с менеджером:
```python
from multiprocessing import Manager, Process
def worker(shared_dict):
shared_dict['count'] = shared_dict.get('count', 0) + 1
if __name__ == '__main__':
with Manager() as m:
data = m.dict()
procs = [Process(target=worker, args=(data,)) for _ in range(4)]
for p in procs: p.start()
for p in procs: p.join()
print(data)
```