Ví dụ giao tiếp giữa các quá trình trong Python

  square_sum = multiprocessing.Value['i']
1
  square_sum.value = sum[result]
0
  result = multiprocessing.Array['i', 4]
6
  square_sum.value = sum[result]
2
  square_sum.value = sum[result]
3
  square_sum.value = sum[result]
4
  square_sum.value = sum[result]
5
  square_sum.value = sum[result]
4
  square_sum.value = sum[result]
7
  square_sum.value = sum[result]
4
  square_sum.value = sum[result]
9
  square_sum.value = sum[result]
10

  result = multiprocessing.Array['i', 4]
3

  square_sum = multiprocessing.Value['i']
1
  square_sum.value = sum[result]
13

  square_sum = multiprocessing.Value['i']
1
  square_sum.value = sum[result]
15
  result = multiprocessing.Array['i', 4]
6
  square_sum.value = sum[result]
17
  result = multiprocessing.Array['i', 4]
6
  square_sum.value = sum[result]
19
  result = multiprocessing.Array['i', 4]
6
  result = multiprocessing.Array['i', 4]
21

  square_sum = multiprocessing.Value['i']
1
  result = multiprocessing.Array['i', 4]
23

  square_sum = multiprocessing.Value['i']
1____225

  square_sum = multiprocessing.Value['i']
1____227

  square_sum = multiprocessing.Value['i']
1
  result = multiprocessing.Array['i', 4]
29

  result = multiprocessing.Array['i', 4]
3

_______01____3302

  square_sum = multiprocessing.Value['i']
1
  square_sum.value = sum[result]
54
  square_sum.value = sum[result]
55
  square_sum.value = sum[result]
306
  square_sum.value = sum[result]
57
  square_sum.value = sum[result]
58
  square_sum.value = sum[result]
59

  square_sum.value = sum[result]
1

Trong ví dụ trên, chúng tôi cố gắng in nội dung của kết quả danh sách toàn cầu ở hai nơi

  • Trong hàm square_list. Vì chức năng này được gọi bởi tiến trình p1, nên danh sách kết quả chỉ được thay đổi trong không gian bộ nhớ của tiến trình p1
  • Sau khi hoàn thành quá trình p1 trong chương trình chính. Vì chương trình chính được điều hành bởi một tiến trình khác nên không gian bộ nhớ của nó vẫn chứa danh sách kết quả trống

Sơ đồ hiển thị dưới đây xóa khái niệm này

Chia sẻ dữ liệu giữa các tiến trình

  1. Bộ nhớ dùng chung. mô-đun đa xử lý cung cấp các đối tượng Mảng và Giá trị để chia sẻ dữ liệu giữa các quy trình
    • Mảng. một mảng ctypes được phân bổ từ bộ nhớ dùng chung
    • Giá trị. một đối tượng ctypes được phân bổ từ bộ nhớ dùng chung

    Đưa ra dưới đây là một ví dụ đơn giản cho thấy việc sử dụng Mảng và Giá trị để chia sẻ dữ liệu giữa các quy trình




      result = multiprocessing.Array['i', 4]
    
    1
      result = multiprocessing.Array['i', 4]
    
    2

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      square_sum.value = sum[result]
    
    314

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    4

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1____3322

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    63
      square_sum.value = sum[result]
    
    325
      square_sum.value = sum[result]
    
    65
      square_sum.value = sum[result]
    
    327
      square_sum.value = sum[result]
    
    328

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    330
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    64
      square_sum.value = sum[result]
    
    69
      square_sum.value = sum[result]
    
    64

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____3337

      square_sum = multiprocessing.Value['i']
    
    1____3339
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    341
      square_sum.value = sum[result]
    
    342

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____3345

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    54
      square_sum.value = sum[result]
    
    55
      square_sum.value = sum[result]
    
    56
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      square_sum.value = sum[result]
    
    352

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____3355

      square_sum = multiprocessing.Value['i']
    
    1____354
      square_sum.value = sum[result]
    
    55
      square_sum.value = sum[result]
    
    359
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      square_sum.value = sum[result]
    
    362

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    61
      square_sum.value = sum[result]
    
    62
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    65
      square_sum.value = sum[result]
    
    66

    _______01____968

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    0
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    2
      square_sum.value = sum[result]
    
    3
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    5
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    7
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    9
      square_sum.value = sum[result]
    
    10

      result = multiprocessing.Array['i', 4]
    
    3

    _______01____3386

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    5
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    390
      square_sum.value = sum[result]
    
    391
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    9
      square_sum.value = sum[result]
    
    394

      result = multiprocessing.Array['i', 4]
    
    3

    _______01____3397

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    399
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    01
      square_sum.value = sum[result]
    
    391
      square_sum.value = sum[result]
    
    394

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    13

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    15
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    19
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    14

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    23

      square_sum = multiprocessing.Value['i']
    
    1____225

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    22

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    29

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____227

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    54
      square_sum.value = sum[result]
    
    55
      square_sum.value = sum[result]
    
    306
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      square_sum.value = sum[result]
    
    352

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____3355

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    54
      square_sum.value = sum[result]
    
    55
      result = multiprocessing.Array['i', 4]
    
    41
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      square_sum.value = sum[result]
    
    362

      square_sum.value = sum[result]
    
    3

    Hãy để chúng tôi cố gắng hiểu từng dòng mã trên

    • Trước hết, chúng ta tạo một Array kết quả như thế này.
        result = multiprocessing.Array['i', 4]
      
      • Đối số đầu tiên là kiểu dữ liệu. 'i' là viết tắt của số nguyên trong khi 'd' là viết tắt của kiểu dữ liệu float
      • Đối số thứ hai là kích thước của mảng. Ở đây, chúng ta tạo một mảng gồm 4 phần tử

      Tương tự ta tạo một Value square_sum như thế này

        square_sum = multiprocessing.Value['i']
      

      Ở đây, chúng ta chỉ cần xác định kiểu dữ liệu. Giá trị có thể được cung cấp một giá trị ban đầu [giả sử 10] như thế này

        square_sum.value = sum[result]
      
      6
    • Thứ hai, chúng tôi chuyển kết quả và square_sum làm đối số trong khi tạo đối tượng Quy trình.
        square_sum.value = sum[result]
      
      5
    • các phần tử mảng kết quả được cung cấp một giá trị bằng cách chỉ định chỉ mục của phần tử mảng.
        square_sum.value = sum[result]
      
      6

      square_sum được cung cấp một giá trị bằng cách sử dụng thuộc tính giá trị của nó

        square_sum.value = sum[result]
      
    • Để in các phần tử mảng kết quả, chúng ta sử dụng result[. ] để in mảng hoàn chỉnh.
        square_sum.value = sum[result]
      
      1

      Giá trị của square_sum được in đơn giản là

        result = multiprocessing.Array['i', 4]
      
      2

    Dưới đây là sơ đồ mô tả cách các quy trình chia sẻ đối tượng Mảng và Giá trị

  2. Quá trình máy chủ. Bất cứ khi nào chương trình python bắt đầu, một quy trình máy chủ cũng được bắt đầu. Từ đó trở đi, bất cứ khi nào cần một quy trình mới, quy trình mẹ sẽ kết nối với máy chủ và yêu cầu nó rẽ nhánh một quy trình mới.
    Tiến trình máy chủ có thể chứa các đối tượng Python và cho phép các tiến trình khác thao tác với chúng bằng proxy.
    mô-đun đa xử lý cung cấp lớp Trình quản lý điều khiển quy trình máy chủ. Do đó, các nhà quản lý cung cấp một cách để tạo dữ liệu có thể được chia sẻ giữa các quy trình khác nhau.

    Trình quản lý quy trình máy chủ linh hoạt hơn so với việc sử dụng các đối tượng bộ nhớ dùng chung vì chúng có thể được tạo để hỗ trợ các loại đối tượng tùy ý như danh sách, từ điển, Hàng đợi, Giá trị, Mảng, v.v. Ngoài ra, một trình quản lý duy nhất có thể được chia sẻ bởi các quy trình trên các máy tính khác nhau qua mạng. Tuy nhiên, chúng chậm hơn so với sử dụng bộ nhớ dùng chung

    Hãy xem xét ví dụ được đưa ra dưới đây




      result = multiprocessing.Array['i', 4]
    
    1
      result = multiprocessing.Array['i', 4]
    
    2

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      result = multiprocessing.Array['i', 4]
    
    49

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

    _______01____253

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1____563
      result = multiprocessing.Array['i', 4]
    
    58
      square_sum.value = sum[result]
    
    65
      result = multiprocessing.Array['i', 4]
    
    60

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    54
      square_sum.value = sum[result]
    
    55
      result = multiprocessing.Array['i', 4]
    
    64
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      result = multiprocessing.Array['i', 4]
    
    67
      result = multiprocessing.Array['i', 4]
    
    68
      result = multiprocessing.Array['i', 4]
    
    69
      square_sum.value = sum[result]
    
    3
      result = multiprocessing.Array['i', 4]
    
    71

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      result = multiprocessing.Array['i', 4]
    
    74

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    78

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1____282

      square_sum = multiprocessing.Value['i']
    
    1____354____355
      result = multiprocessing.Array['i', 4]
    
    86
      square_sum.value = sum[result]
    
    394

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    61
      square_sum.value = sum[result]
    
    62
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    93
      square_sum.value = sum[result]
    
    66

      square_sum = multiprocessing.Value['i']
    
    1____296

      square_sum.value = sum[result]
    
    67
      result = multiprocessing.Array['i', 4]
    
    98

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    00
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum = multiprocessing.Value['i']
    
    02
      square_sum = multiprocessing.Value['i']
    
    03
      square_sum = multiprocessing.Value['i']
    
    04
      square_sum = multiprocessing.Value['i']
    
    05
      square_sum.value = sum[result]
    
    4
      square_sum = multiprocessing.Value['i']
    
    07
      square_sum = multiprocessing.Value['i']
    
    08
      square_sum = multiprocessing.Value['i']
    
    09
      square_sum.value = sum[result]
    
    4
      square_sum = multiprocessing.Value['i']
    
    11
      square_sum = multiprocessing.Value['i']
    
    08
      square_sum = multiprocessing.Value['i']
    
    13
      square_sum.value = sum[result]
    
    4
      square_sum = multiprocessing.Value['i']
    
    11
      square_sum = multiprocessing.Value['i']
    
    16

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    18

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    20
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    55
      square_sum = multiprocessing.Value['i']
    
    23
      square_sum.value = sum[result]
    
    4
      square_sum = multiprocessing.Value['i']
    
    25
      square_sum.value = sum[result]
    
    394

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    29

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    15
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum = multiprocessing.Value['i']
    
    35
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum = multiprocessing.Value['i']
    
    37

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    39
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum = multiprocessing.Value['i']
    
    43
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum = multiprocessing.Value['i']
    
    45

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    48

      square_sum.value = sum[result]
    
    67
      result = multiprocessing.Array['i', 4]
    
    25

      square_sum.value = sum[result]
    
    67
      result = multiprocessing.Array['i', 4]
    
    29

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    55

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    57

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    59

      square_sum.value = sum[result]
    
    30

    Hãy để chúng tôi cố gắng hiểu đoạn mã trên

    • Trước hết, chúng tôi tạo một đối tượng người quản lý bằng cách sử dụng.
        square_sum.value = sum[result]
      
      31

      Tất cả các dòng bên dưới với khối câu lệnh đều thuộc phạm vi của đối tượng người quản lý

    • Sau đó, chúng tôi tạo một bản ghi danh sách trong bộ nhớ xử lý máy chủ bằng cách sử dụng.
        square_sum.value = sum[result]
      
      32

      Tương tự, bạn có thể tạo từ điển với tư cách là người quản lý. phương pháp chính tả

    • Cuối cùng, chúng tôi tạo các quy trình p1 [để chèn bản ghi mới vào danh sách bản ghi] và p2 [để in bản ghi] và chạy chúng trong khi chuyển bản ghi dưới dạng một trong các đối số

    Khái niệm về quy trình máy chủ được mô tả trong sơ đồ hiển thị bên dưới

Giao tiếp giữa các tiến trình

Việc sử dụng hiệu quả nhiều quy trình thường yêu cầu một số giao tiếp giữa chúng, để có thể phân chia công việc và tổng hợp kết quả.
đa xử lý hỗ trợ hai loại kênh liên lạc giữa các quy trình.

  • Xếp hàng
  • Đường ống
  1. Hàng đợi. Một cách đơn giản để giao tiếp giữa tiến trình với đa xử lý là sử dụng Hàng đợi để truyền thông điệp qua lại. Bất kỳ đối tượng Python nào cũng có thể đi qua Hàng đợi.
    Lưu ý. đa xử lý. Lớp hàng đợi gần như là một bản sao của hàng đợi. Xếp hàng.
    Hãy xem xét chương trình ví dụ dưới đây.




      result = multiprocessing.Array['i', 4]
    
    1
      result = multiprocessing.Array['i', 4]
    
    2

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      square_sum = multiprocessing.Value['i']
    
    64

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    4

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

    _______01____072

      square_sum = multiprocessing.Value['i']
    
    1____563
      square_sum.value = sum[result]
    
    64
      square_sum.value = sum[result]
    
    65
      square_sum.value = sum[result]
    
    66

      square_sum.value = sum[result]
    
    67
      square_sum = multiprocessing.Value['i']
    
    79
      square_sum.value = sum[result]
    
    69
      square_sum.value = sum[result]
    
    50

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      square_sum = multiprocessing.Value['i']
    
    84

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    88

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

    _______01____354____355

      square_sum = multiprocessing.Value['i']
    
    94
      square_sum.value = sum[result]
    
    394

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    97
      square_sum = multiprocessing.Value['i']
    
    98
      square_sum = multiprocessing.Value['i']
    
    99

    _______567____354____5602

      square_sum = multiprocessing.Value['i']
    
    1____354____355
      square_sum.value = sum[result]
    
    606
      square_sum.value = sum[result]
    
    394

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    61
      square_sum.value = sum[result]
    
    62
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    65
      square_sum.value = sum[result]
    
    66

    _______01____968

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    0
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    2
      square_sum.value = sum[result]
    
    3
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    5
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    7
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    9
      square_sum.value = sum[result]
    
    10

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____5631

      square_sum = multiprocessing.Value['i']
    
    1____5633
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    635

      result = multiprocessing.Array['i', 4]
    
    3

    _______01____029

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    15
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    19
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    646

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    39
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    652
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    654

      result = multiprocessing.Array['i', 4]
    
    3

    _______01____5657

      square_sum = multiprocessing.Value['i']
    
    1____225

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    29

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____5664

    _______01____057

    _______01____059

      square_sum.value = sum[result]
    
    33

    Hãy để chúng tôi cố gắng hiểu đoạn mã trên từng bước

    • Đầu tiên, chúng tôi tạo Hàng đợi đa xử lý bằng cách sử dụng.
        square_sum.value = sum[result]
      
      34
    • Sau đó, chúng tôi chuyển hàng đợi trống q đến hàm square_list thông qua quy trình p1. Các phần tử được chèn vào hàng đợi bằng phương thức put.
        square_sum.value = sum[result]
      
      35
    • Để in các phần tử hàng đợi, chúng tôi sử dụng phương thức get cho đến khi hàng đợi không trống.
        square_sum.value = sum[result]
      
      36

    Đưa ra dưới đây là một sơ đồ đơn giản mô tả các hoạt động trên hàng đợi

  2. ống. Một đường ống chỉ có thể có hai điểm cuối. Do đó, nó được ưu tiên hơn hàng đợi khi chỉ yêu cầu giao tiếp hai chiều

    mô-đun đa xử lý cung cấp 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. Hai đối tượng kết nối được trả về bởi Pipe[] đại diện cho hai đầu của đường ống. Mỗi đối tượng kết nối có các phương thức send[] và recv[] [trong số các phương thức khác].
    Xét chương trình dưới đây.




      result = multiprocessing.Array['i', 4]
    
    1
      result = multiprocessing.Array['i', 4]
    
    2

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      square_sum.value = sum[result]
    
    673

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1____5677

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1____563
      square_sum.value = sum[result]
    
    682
      square_sum.value = sum[result]
    
    65
      square_sum.value = sum[result]
    
    684

    _______567____5686

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    54____355
      square_sum.value = sum[result]
    
    690
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      square_sum.value = sum[result]
    
    693

      square_sum = multiprocessing.Value['i']
    
    1____5695

      result = multiprocessing.Array['i', 4]
    
    3

      result = multiprocessing.Array['i', 4]
    
    9
      square_sum.value = sum[result]
    
    698

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1____3502

      square_sum = multiprocessing.Value['i']
    
    1____3504

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    2

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    97
      square_sum.value = sum[result]
    
    3
      square_sum.value = sum[result]
    
    66

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    682
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    514

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    61
      square_sum.value = sum[result]
    
    682
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    520
      square_sum.value = sum[result]
    
    66

      square_sum.value = sum[result]
    
    522
      square_sum.value = sum[result]
    
    523

      square_sum.value = sum[result]
    
    67
      square_sum.value = sum[result]
    
    54
      square_sum.value = sum[result]
    
    55
      square_sum.value = sum[result]
    
    527
      square_sum.value = sum[result]
    
    57
      square_sum.value = sum[result]
    
    58
      square_sum.value = sum[result]
    
    693

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum.value = sum[result]
    
    61
      square_sum.value = sum[result]
    
    62
      result = multiprocessing.Array['i', 4]
    
    6
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    65
      square_sum.value = sum[result]
    
    66

      square_sum = multiprocessing.Value['i']
    
    1____3539

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    541
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    2
      square_sum.value = sum[result]
    
    544
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    546
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    548
      square_sum.value = sum[result]
    
    4
      square_sum.value = sum[result]
    
    520
      square_sum.value = sum[result]
    
    10

      result = multiprocessing.Array['i', 4]
    
    3

    _______01____3554

      square_sum = multiprocessing.Value['i']
    
    1____3556
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    558

      result = multiprocessing.Array['i', 4]
    
    3

    _______01____029

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum.value = sum[result]
    
    15
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    567
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    569

      square_sum = multiprocessing.Value['i']
    
    1
      square_sum = multiprocessing.Value['i']
    
    39
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    17
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    575
      result = multiprocessing.Array['i', 4]
    
    6
      square_sum.value = sum[result]
    
    577

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____3580

      square_sum = multiprocessing.Value['i']
    
    1____225

    _______01____057

      result = multiprocessing.Array['i', 4]
    
    3

      square_sum = multiprocessing.Value['i']
    
    1____3587

      square_sum = multiprocessing.Value['i']
    
    1
      result = multiprocessing.Array['i', 4]
    
    29

    _______01____059

      square_sum.value = sum[result]
    
    37

    Hãy để chúng tôi cố gắng hiểu đoạn mã trên

    • Một đường ống được tạo đơn giản bằng cách sử dụng.
        square_sum.value = sum[result]
      
      38

      Hàm trả về hai đối tượng kết nối cho hai đầu của đường ống

    • Tin nhắn được gửi từ đầu này sang đầu kia bằng phương thức gửi.
        square_sum.value = sum[result]
      
      39
    • Để nhận bất kỳ tin nhắn nào ở một đầu của đường ống, chúng tôi sử dụng phương thức recv.
        result = multiprocessing.Array['i', 4]
      
      0
    • Trong chương trình trên, chúng tôi gửi một danh sách các tin nhắn từ đầu này đến đầu kia. Ở đầu bên kia, chúng tôi đọc tin nhắn cho đến khi nhận được tin nhắn “END”

    Hãy xem xét sơ đồ được đưa ra dưới đây cho thấy mối quan hệ giữa đường ống b/w và các quy trình

Ghi chú. Dữ liệu trong một đường ống có thể bị hỏng nếu hai quy trình [hoặc luồng] cố gắng đọc hoặc ghi vào cùng một đầu của đường ống cùng một lúc. Tất nhiên, không có nguy cơ tham nhũng từ các quy trình sử dụng các đầu khác nhau của đường ống cùng một lúc. Cũng lưu ý rằng Hàng đợi thực hiện đồng bộ hóa phù hợp giữa các quy trình, với chi phí phức tạp hơn. Do đó, hàng đợi được cho là luồng và xử lý an toàn

Tiếp theo

  • Đồng bộ hóa và gộp các quy trình trong Python

Bài viết này được đóng góp bởi Nikhil Kumar. Nếu bạn thích GeeksforGeeks và muốn đóng góp, bạn cũng có thể viết một bài báo bằng cách sử dụng write. chuyên viên máy tính. org hoặc gửi bài viết của bạn tới review-team@geeksforgeeks. tổ chức. Xem bài viết của bạn xuất hiện trên trang chính của GeeksforGeeks và trợ giúp các Geeks khác

Vui lòng viết bình luận nếu bạn thấy bất cứ điều gì không chính xác hoặc bạn muốn chia sẻ thêm thông tin về chủ đề thảo luận ở trên

Các ví dụ về hệ thống IPC là gì?

Các cách khác nhau của IPC là ống, truyền tin nhắn, hàng đợi tin nhắn, bộ nhớ dùng chung, giao tiếp trực tiếp, giao tiếp gián tiếp và FIFO .

Điều nào sau đây là một ví dụ về giao tiếp giữa các quá trình?

Các ví dụ giao tiếp giữa các quá trình bao gồm như sau. Posix sử dụng kỹ thuật bộ nhớ dùng chung . Windows XP sử dụng kỹ thuật truyền tin nhắn. Mach sử dụng kỹ thuật truyền thông điệp.

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 Python – PyCSP .

Hai loại giao tiếp giữa các quá trình là gì?

Các phương thức giao tiếp giữa các quá trình . Như tên gợi ý, vùng bộ nhớ dùng chung chia sẻ bộ nhớ dùng chung giữa các tiến trình. shared memory and message passing. As the name suggests, the shared memory region shares a shared memory between the processes.

Chủ Đề