Можно ли передавать данные между процессами в многопроцессорной среде
Python
Middle
Т-Банк
Можно ли передавать данные между процессами в многопроцессорной среде
Ответы
Да, в Python можно передавать данные между процессами, но это требует специальных механизмов, так как процессы имеют отдельные области памяти. Основные способы:
- **Очереди (Queue)** - потокобезопасный способ обмена данными:
```
from multiprocessing import Process, Queue
def worker(q):
q.put('Hello from child')
if __name__ == '__main__':
q = Queue()
p = Process(target=worker, args=(q,))
p.start()
print(q.get()) # Получаем данные
p.join()
```
- **Каналы (Pipe)** - двунаправленное соединение:
```
from multiprocessing import Process, Pipe
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()) # Получаем сообщение
p.join()
```
- **Разделяемая память (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
```
Важно помнить о блокировках при работе с разделяемыми ресурсами и учитывать накладные расходы IPC.