Giao tiếp giữa các quá trình giữa c và python

Quá trình giao tiếp có nghĩa là trao đổi dữ liệu giữa các quá trình. Cần trao đổi dữ liệu giữa các quy trình để phát triển ứng dụng song song. Sơ đồ sau đây cho thấy các cơ chế giao tiếp khác nhau để đồng bộ hóa giữa nhiều quy trình con -

Giao tiếp giữa các quá trình giữa c và python

Cơ chế giao tiếp khác nhau

Trong phần này, chúng ta sẽ tìm hiểu về các cơ chế giao tiếp khác nhau. Các cơ chế được mô tả dưới đây -

hàng đợi

Hàng đợi có thể được sử dụng với các chương trình đa quy trình. Lớp Queue của mô-đun đa xử lý tương tự như Queue. lớp xếp hàng. Do đó, cùng một API có thể được sử dụng. đa xử lý. Queue cung cấp cho chúng ta một luồng và xử lý cơ chế FIFO (vào trước ra trước) an toàn giữa các tiến trình

Thí dụ

Sau đây là một ví dụ đơn giản được lấy từ tài liệu chính thức của python về đa xử lý để hiểu khái niệm về lớp Queue của đa xử lý

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()

đầu ra

[42, None, 'hello']

ống

Nó là một cấu trúc dữ liệu, được sử dụng để giao tiếp giữa các quy trình trong các chương trình đa quy trình. Hàm Pipe() trả về một cặp đối tượng kết nối được kết nối bởi một đường ống mà theo mặc định là song công (hai chiều). Nó hoạt động theo cách sau -

  • Nó trả về một cặp đối tượng kết nối đại diện cho hai đầu của đường ống

  • Mọi đối tượng đều có hai phương thức – send() và recv(), để giao tiếp giữa các tiến trình

Thí dụ

Sau đây là một ví dụ đơn giản được lấy từ tài liệu chính thức của python về đa xử lý để hiểu khái niệm hàm Pipe() của đa xử lý

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()

đầu ra

[42, None, 'hello']

Giám đốc

Trình quản lý là một lớp mô-đun đa xử lý cung cấp cách phối hợp thông tin được chia sẻ giữa tất cả người dùng của nó. Đối tượng người quản lý điều khiển quy trình máy chủ, quản lý các đối tượng được chia sẻ và cho phép các quy trình khác thao tác với chúng. Nói cách khác, người quản lý cung cấp cách tạo dữ liệu có thể được chia sẻ giữa các quy trình khác nhau. Sau đây là các thuộc tính khác nhau của đối tượng người quản lý -

  • Thuộc tính chính của trình quản lý là kiểm soát quy trình máy chủ, quản lý các đối tượng được chia sẻ

  • Một thuộc tính quan trọng khác là cập nhật tất cả các đối tượng được chia sẻ khi bất kỳ quy trình nào sửa đổi nó

Thí dụ

Sau đây là ví dụ sử dụng đối tượng người quản lý để tạo bản ghi danh sách trong quy trình máy chủ và sau đó thêm bản ghi mới vào danh sách đó

import multiprocessing

def print_records(records):
   for record in records:
      print("Name: {0}\nScore: {1}\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()

đầu ra

A New record is added

Name: Computers
Score: 1

Name: Histoty
Score: 5

Name: Hindi
Score: 9

Name: English
Score: 3

Khái niệm về Namespaces trong Manager

Lớp Người quản lý đi kèm với khái niệm về không gian tên, đây là một phương pháp nhanh chóng để chia sẻ một số thuộc tính trên nhiều quy trình. Các không gian tên không có bất kỳ phương thức công khai nào có thể được gọi nhưng chúng có các thuộc tính có thể ghi

Thí dụ

Ví dụ tập lệnh Python sau đây giúp chúng tôi sử dụng các không gian tên để chia sẻ dữ liệu trên quy trình chính và quy trình con -

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)

đầu ra

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

Ctypes-Mảng và Giá trị

Mô-đun đa xử lý cung cấp các đối tượng Mảng và Giá trị để lưu trữ dữ liệu trong bản đồ bộ nhớ dùng chung. Mảng là một mảng ctypes được cấp phát từ bộ nhớ dùng chung và Giá trị là một đối tượng ctypes được cấp phát từ bộ nhớ dùng chung

Để được với, nhập Quy trình, Giá trị, Mảng từ đa xử lý

Thí dụ

Tập lệnh Python sau đây là một ví dụ được lấy từ tài liệu python để sử dụng Mảng và Giá trị của Ctypes để chia sẻ một số dữ liệu giữa các quy trình

________số 8_______

đầu ra

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

Giao tiếp các quy trình tuần tự (CSP)

CSP được sử dụng để minh họa sự tương tác của các hệ thống với các hệ thống khác có mô hình đồng thời. CSP là một khung để viết đồng thời hoặc chương trình thông qua truyền tin nhắn và do đó nó có hiệu quả để mô tả đồng thời

Thư viện Python – PyCSP

Để triển khai các nguyên hàm cốt lõi được tìm thấy trong CSP, Python có một thư viện có tên là PyCSP. Nó giữ cho việc triển khai rất ngắn gọn và dễ đọc để có thể hiểu rất dễ dàng. Sau đây là mạng quy trình cơ bản của PyCSP −

Giao tiếp giữa các quá trình giữa c và python

Trong mạng quy trình PyCSP ở trên, có hai quy trình – Quy trình 1 và Quy trình 2. Các quy trình này giao tiếp bằng cách truyền tin nhắn qua hai kênh - kênh 1 và kênh 2

Cài đặt PyCSP

Với sự trợ giúp của lệnh sau, chúng ta có thể cài đặt thư viện Python PyCSP −

[42, None, 'hello']
0

Thí dụ

Tập lệnh Python sau đây là một ví dụ đơn giản để chạy song song hai quy trình với nhau. Nó được thực hiện với sự trợ giúp của thư viện python PyCSP –

[42, None, 'hello']
1

Trong đoạn mã trên, hai chức năng là P1 và P2 đã được tạo và sau đó được trang trí bằng @ process để chuyển đổi chúng thành quy trình

Mô-đun Python nào hỗ trợ kết nối mạng và giao tiếp giữa các quá trình?

Thư viện chuẩn của Python bao gồm nhiều mô-đun tích hợp khác nhau hỗ trợ kết nối và giao tiếp giữa các quá trình. Truy cập mạng có sẵn ở hai cấp độ

Python có phải là một công cụ giao tiếp không?

Vai trò của Python trong phát triển web có thể bao gồm việc gửi dữ liệu đến và đi từ máy chủ, xử lý dữ liệu và giao tiếp với cơ sở dữ liệu , định tuyến URL và đảm bảo tính bảo mật.

Giao tiếp giữa các quá trình hoạt động như thế nào?

Giao tiếp giữa các quá trình (IPC) là một cơ chế cho phép các quá trình giao tiếp với nhau và đồng bộ hóa hành động của chúng . Sự giao tiếp giữa các quá trình này có thể được xem như một phương thức hợp tác giữa chúng. Các tiến trình có thể giao tiếp với nhau thông qua cả hai. Bộ nhớ dùng chung.