Какие знаешь способы реализации межпроцессного взаимодействия
Python
Senior
Okko
Какие знаешь способы реализации межпроцессного взаимодействия
Ответы
В Python есть несколько способов для межпроцессного взаимодействия (IPC):
- **Сокеты** — низкоуровневый, но гибкий способ. Пример:
```
# Сервер
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(1)
conn, addr = s.accept()
data = conn.recv(1024)
```
- **Очереди (multiprocessing.Queue)** — потокобезопасная очередь:
```
from multiprocessing import Process, Queue
def worker(q):
q.put('Hello from child!')
q = Queue()
p = Process(target=worker, args=(q,))
p.start()
print(q.get()) # 'Hello from child!'
```
- **Pipe** — двунаправленный канал:
```
from multiprocessing import Pipe, Process
def worker(conn):
conn.send('Message')
conn.close()
parent_conn, child_conn = Pipe()
p = Process(target=worker, args=(child_conn,))
p.start()
print(parent_conn.recv()) # 'Message'
```
- **Shared Memory** (multiprocessing.Value/Array) — общая память:
```
from multiprocessing import Process, Value
def worker(n):
n.value += 1
num = Value('i', 0)
p = Process(target=worker, args=(num,))
p.start()
p.join()
print(num.value) # 1
```
- **Менеджеры (multiprocessing.Manager)** — разделяемые объекты:
```
from multiprocessing import Manager, Process
def worker(d):
d['key'] = 'value'
manager = Manager()
d = manager.dict()
p = Process(target=worker, args=(d,))
p.start()
p.join()
print(d) # {'key': 'value'}
```
Выбор зависит от задачи: для простых случаев подойдут Pipe/Queue, для сложных — сокеты или менеджеры.