Каналы в пакете multiprocessing

kanaly v pakete multiprocessing Системные инструменты параллельного выполнения

Чтобы продемонстрировать приемы работы с инструментами IPC, перечисленными выше, далее приводятся три примера, в которых взаимодействия между родительским и дочерним процессами реализованы тремя разными способами. В примере 5.30 используется простой объект канала, по которому передаются данные между родительским и дочерним процессами.

Пример 5.30. PP4E\System\Processes\multi2.py

Реализует взаимодействие с помощью анонимных каналов из пакета multiprocessing. Возвращаемые 2 объекта Connection представляют концы канала: объекты передаются в один конец и принимаются из другого конца, хотя каналы по умолчанию являются двунаправленными

import os

from multiprocessing import Process, Pipe

def sender(pipe):

передает объект родителю через анонимный канал

pipe.send([‘spam’] + [42, ‘eggs’])

pipe.close()

def talker(pipe):

передает и принимает объекты из канала

pipe.send(dict(name=’Bob’, spam=42)) reply = pipe.recv()

print(‘talker got:’, reply)

if __name__ == ‘__main__’:

(parentEnd, childEnd) = Pipe()

Process(target=sender, args=(childEnd,)).start() # породить потомка # с каналом

print(‘parent got:’, parentEnd.recv()) # принять от потомка

parentEnd.close() # или может быть закрыт

# автоматически сборщиком # мусора

(parentEnd, childEnd) = Pipe()

child = Process(target=talker, args=(childEnd,)) child.start()

print(‘parent got:’, parentEnd.recv()) # принять от потомка

parentEnd.send({x * 2 for x in ‘spam’}) # передать потомку

child.join() # ждать завершения потомка

print(‘parent exit’)

Ниже приводится вывод этого сценария, запущенного в Windows. Первый потомок просто передает объект родителю, а второй — передает и принимает объекты по одному и тому же каналу:

C:\\PP4E\System\Processes> multi2.py

parent got: [‘spam’, 42, ‘eggs’]

parent got: {‘name’: ‘Bob’, ‘spam’: 42}

talker got: {‘ss’, ‘aa’, ‘pp’, ‘mm’}

parent exit

Объекты каналов в этом модуле делают реализацию взаимодействий между двумя процессами переносимой (и практически тривиальной).

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий