Python взаимодействие между процессами

Взаимодействие процессов

Взаимосвязь процессов означает обмен данными между процессами. Для обмена параллельными приложениями необходимо обмениваться данными между процессами. Следующая диаграмма показывает различные механизмы связи для синхронизации между несколькими подпроцессами –

сношение

Различные коммуникационные механизмы

В этом разделе мы узнаем о различных коммуникационных механизмах. Механизмы описаны ниже –

Очереди

Очереди можно использовать с многопроцессорными программами. Класс Queue многопроцессорного модуля аналогичен классу Queue.Queue . Следовательно, можно использовать один и тот же API. Мультипроцессорная обработка .Queue предоставляет нам механизм взаимодействия потоков между процессами FIFO (первым пришел – первым обслужен).

пример

Ниже приведен простой пример, взятый из официальных документов Python по многопроцессорности, для понимания концепции многопроцессорного класса Queue.

from multiprocessing import Process, Queue import queue import random def f(q): q.put([42, None, 'hello']) def main(): q = Queue() p = Process(target = f, args = (q,)) p.start() print (q.get()) if __name__ == '__main__': main()

Выход

трубы

Это структура данных, которая используется для связи между процессами в многопроцессорных программах. Функция Pipe () возвращает пару объектов соединения, соединенных каналом, который по умолчанию является дуплексным (двухсторонним). Это работает следующим образом –

  • Он возвращает пару объектов соединения, которые представляют два конца канала.
  • У каждого объекта есть два метода – send () и recv () для взаимодействия между процессами.

Он возвращает пару объектов соединения, которые представляют два конца канала.

У каждого объекта есть два метода – send () и recv () для взаимодействия между процессами.

Читайте также:  Мой первый сайт

пример

Ниже приведен простой пример, взятый из официальных документов Python по многопроцессорности, для понимания концепции функции многопроцессорной обработки Pipe () .

from multiprocessing import Process, Pipe def f(conn): conn.send([42, None, 'hello']) conn.close() if __name__ == '__main__': parent_conn, child_conn = Pipe() p = Process(target = f, args = (child_conn,)) p.start() print (parent_conn.recv()) p.join()

Выход

Менеджер

Менеджер – это класс многопроцессорных модулей, который обеспечивает способ координации общей информации между всеми его пользователями. Управляющий объект управляет процессом сервера, который управляет общими объектами и позволяет другим процессам манипулировать ими. Другими словами, менеджеры предоставляют способ создавать данные, которые могут быть разделены между различными процессами. Ниже приведены различные свойства объекта менеджера –

  • Основным свойством менеджера является управление серверным процессом, который управляет общими объектами.
  • Другим важным свойством является обновление всех общих объектов, когда какой-либо процесс изменяет их.

Основным свойством менеджера является управление серверным процессом, который управляет общими объектами.

Другим важным свойством является обновление всех общих объектов, когда какой-либо процесс изменяет их.

пример

Ниже приведен пример, который использует объект менеджера для создания записи списка в процессе сервера, а затем добавления новой записи в этот список.

import multiprocessing def print_records(records): for record in records: print("Name: \nScore: \n".format(record[0], record[1])) def insert_record(record, records): records.append(record) print("A New record is added\n") if __name__ == '__main__': with multiprocessing.Manager() as manager: records = manager.list([('Computers', 1), ('Histoty', 5), ('Hindi',9)]) new_record = ('English', 3) p1 = multiprocessing.Process(target = insert_record, args = (new_record, records)) p2 = multiprocessing.Process(target = print_records, args = (records,)) p1.start() p1.join() p2.start() p2.join()

Выход

A New record is added Name: Computers Score: 1 Name: Histoty Score: 5 Name: Hindi Score: 9 Name: English Score: 3

Концепция пространств имен в менеджере

Класс Manager поставляется с концепцией пространств имен, которая является быстрым способом разделения нескольких атрибутов между несколькими процессами. Пространства имен не содержат никаких открытых методов, которые можно вызывать, но у них есть доступные для записи атрибуты.

Читайте также:  Изучаем python 5 е издание epub

пример

Следующий пример скрипта Python помогает нам использовать пространства имен для обмена данными между основным процессом и дочерним процессом –

import multiprocessing def Mng_NaSp(using_ns): using_ns.x +=5 using_ns.y *= 10 if __name__ == '__main__': manager = multiprocessing.Manager() using_ns = manager.Namespace() using_ns.x = 1 using_ns.y = 1 print ('before', using_ns) p = multiprocessing.Process(target = Mng_NaSp, args = (using_ns,)) p.start() p.join() print ('after', using_ns)

Выход

before Namespace(x = 1, y = 1) after Namespace(x = 6, y = 10)

Ctypes-Array и Value

Многопроцессорный модуль предоставляет объекты Array и Value для хранения данных в карте общей памяти. Массив – это массив ctypes, выделенный из общей памяти, а Value – объект ctypes, выделенный из общей памяти.

Чтобы быть с, импортируйте Process, Value, Array из мультипроцессора.

пример

Следующий скрипт Python – это пример, взятый из документации по Python для использования массива Ctypes и Value для обмена некоторыми данными между процессами.

def f(n, a): n.value = 3.1415927 for i in range(len(a)): a[i] = -a[i] if __name__ == '__main__': num = Value('d', 0.0) arr = Array('i', range(10)) p = Process(target = f, args = (num, arr)) p.start() p.join() print (num.value) print (arr[:])

Выход

3.1415927 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

Связь последовательных процессов (CSP)

CSP используется для иллюстрации взаимодействия систем с другими системами с одновременными моделями. CSP является платформой для написания параллельных или программных программ посредством передачи сообщений и, следовательно, он эффективен для описания параллелизма.

Библиотека Python – PyCSP

Для реализации основных примитивов, найденных в CSP, в Python есть библиотека под названием PyCSP. Это делает реализацию очень короткой и удобочитаемой, чтобы ее можно было легко понять. Ниже приводится основная сеть процессов PyCSP –

Читайте также:  Report fin22 ru index php menu reports

PyCSP

В вышеупомянутой сети процессов PyCSP есть два процесса – Process1 и Process 2. Эти процессы взаимодействуют, передавая сообщения по двум каналам – каналу 1 и каналу 2.

Установка PyCSP

С помощью следующей команды мы можем установить библиотеку Python PyCSP –

пример

Следующий скрипт Python – простой пример запуска двух процессов параллельно друг другу. Это делается с помощью библиотеки PyCSP python –

from pycsp.parallel import * import time @process def P1(): time.sleep(1) print('P1 exiting') @process def P2(): time.sleep(1) print('P2 exiting') def main(): Parallel(P1(), P2()) print('Terminating') if __name__ == '__main__': main()

В приведенном выше сценарии две функции, а именно P1 и P2 , были созданы, а затем украшены @process для преобразования их в процессы.

Источник

Оцените статью