Как можно обмениваться данными между процессами
Python
Junior
Без компании
Как можно обмениваться данными между процессами
Ответы
В Python есть несколько способов обмена данными между процессами:
- **Очереди (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!'
p.join()
```
- **Каналы (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'
p.join()
```
- **Разделяемая память (Value, Array, Manager)** – для изменяемых структур:
```
from multiprocessing import Process, Value
def increment(n):
n.value += 1
num = Value('i', 0)
p = Process(target=increment, args=(num,))
p.start()
p.join()
print(num.value) # 1
```
- **Сокеты или файлы** – для межпроцессного взаимодействия (IPC) вне Python.
Выбор зависит от задачи: `Queue` и `Pipe` – для простых сообщений, `Manager` – для сложных структур, `Value/Array` – для числовых данных.