Как можно обмениваться данными между процессами в Multiprocessing
Python
Junior
Без компании
Как можно обмениваться данными между процессами в Multiprocessing
Ответы
В 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, Array
def worker(n, a):
n.value = 3.1415
a[0] = 5
num = Value('d', 0.0)
arr = Array('i', range(10))
p = Process(target=worker, args=(num, arr))
p.start()
p.join()
print(num.value, arr[:])
```
- **Менеджеры** - позволяют разделять сложные структуры данных между процессами.
Выбор метода зависит от задачи: Queue/Pipe для сообщений, Value/Array для числовых данных, Manager для сложных структур. Все эти методы обеспечивают безопасный обмен данными между процессами.