Sobes.tech
Back to questions
Senior
3

Как обмениваться данными между процессами в Python?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

В Python для обмена данными между процессами можно использовать модуль multiprocessing, который предоставляет несколько механизмов:

  1. Очереди (Queue) — потокобезопасные очереди, которые позволяют процессам безопасно обмениваться объектами.
from multiprocessing import Process, Queue

def worker(q):
    q.put('Данные из дочернего процесса')

if __name__ == '__main__':
    q = Queue()
    p = Process(target=worker, args=(q,))
    p.start()
    print(q.get())  # Получаем данные
    p.join()
  1. Пулы (Pool) с возвращаемыми значениями — можно получать результаты из процессов через методы apply_async.

  2. Общие объекты (Value, Array) — позволяют создавать разделяемые между процессами объекты примитивных типов.

  3. Менеджеры (Manager) — позволяют создавать разделяемые объекты более сложных типов, например, словари, списки.

from multiprocessing import Process, Manager

def worker(d):
    d['ключ'] = 'значение'

if __name__ == '__main__':
    with Manager() as manager:
        d = manager.dict()
        p = Process(target=worker, args=(d,))
        p.start()
        p.join()
        print(d)  # {'ключ': 'значение'}
  1. Сокеты или другие IPC механизмы — для более сложных сценариев можно использовать сокеты, пайпы или файлы.

Выбор зависит от задачи: для простого обмена данными — Queue или Manager подходят лучше всего.