Đường ống trong Python đa xử lý

Gói này bao bọc đường ống giao tiếp đơn giản để nó có thể được sử dụng như một phần của vòng lặp sự kiện asyncio không chặn. Một đường ống song công cũng được cung cấp, cho phép đọc và ghi ở cả hai đầu

ví dụ đơn công

Ví dụ sau mở một đường ống có đầu ghi trong tiến trình con và đầu đọc trong tiến trình cha

Khi sử dụng nhiều quy trình, người ta thường sử dụng tính năng truyền thông báo để liên lạc giữa các quy trình và tránh phải sử dụng bất kỳ nguyên tắc đồng bộ hóa nào như khóa

Để truyền tin nhắn, người ta có thể sử dụng Pipe[] [để kết nối giữa hai quy trình] hoặc hàng đợi [cho phép nhiều nhà sản xuất và người tiêu dùng]

Các loại _______2_______, SimpleQueue và JoinableQueue là hàng đợi FIFO nhiều nhà sản xuất, nhiều người tiêu dùng được mô hình hóa trên lớp queue.Queue trong thư viện tiêu chuẩn. Chúng khác nhau ở chỗ Queue thiếu task_done[] và join[] được đưa vào Python 2. 5%u2019s queue.Queue lớp

Nếu bạn sử dụng JoinableQueue thì bạn phải gọi Queue0 đối với mỗi tác vụ bị xóa khỏi hàng đợi, nếu không, semaphore dùng để đếm số lượng tác vụ chưa hoàn thành cuối cùng có thể bị tràn, tạo ra một ngoại lệ

Ghi chú

 

Queue1 sử dụng các trường hợp ngoại lệ _______2_______2 và Queue3 thông thường để báo hiệu thời gian chờ. Chúng không có sẵn trong không gian tên Queue1 do đó bạn cần nhập chúng từ Queue5

Cảnh báo

 

Nếu một quy trình bị giết bằng cách sử dụng Queue6 hoặc Queue7 trong khi nó đang cố gắng sử dụng một Queue, thì dữ liệu trong hàng đợi có khả năng bị hỏng. Điều này có thể khiến bất kỳ quy trình nào khác gặp ngoại lệ khi nó cố sử dụng hàng đợi sau này

Queue9SimpleQueue0[[hai mặt]]

Trả về một cặp SimpleQueue1 của SimpleQueue2 đối tượng đại diện cho các đầu của một đường ống

Nếu hai chiều là SimpleQueue3 [mặc định] thì đường ống là hai chiều. Nếu song công là SimpleQueue4 thì đường ống là một chiều. SimpleQueue5 chỉ có thể được sử dụng để nhận tin nhắn và SimpleQueue6 chỉ có thể được sử dụng để gửi tin nhắn

lớp học Queue9_______2_______[[cỡ tối đa]]

Trả về một hàng đợi chia sẻ quy trình được thực hiện bằng cách sử dụng một đường ống và một vài ổ khóa/semaphores. Khi một quy trình lần đầu tiên đặt một mục vào hàng đợi, một chuỗi trung chuyển được bắt đầu để chuyển các đối tượng từ bộ đệm vào đường ống

Các trường hợp ngoại lệ Queue2 và Queue3 thông thường từ thư viện chuẩn%u2019s mô-đun Queue5 được nâng lên thành tín hiệu hết thời gian chờ

Queue thực hiện tất cả các phương pháp của queue.Queue ngoại trừ task_done[] và join[]

JoinableQueue6[]

Trả về kích thước gần đúng của hàng đợi. Do ngữ nghĩa đa luồng/đa xử lý, con số này không đáng tin cậy

Lưu ý rằng điều này có thể tăng JoinableQueue7 trên các nền tảng Unix như Mac OS X nơi JoinableQueue8 không được triển khai

JoinableQueue9[]

Quay lại SimpleQueue3 nếu hàng đợi trống, SimpleQueue4 nếu không. Do ngữ nghĩa đa luồng/đa xử lý, điều này không đáng tin cậy

queue.Queue2[]

Quay lại SimpleQueue3 nếu hàng đợi đã đầy, SimpleQueue4 nếu không. Do ngữ nghĩa đa luồng/đa xử lý, điều này không đáng tin cậy

queue.Queue5[obj[, block[, timeout]]]

Đặt obj vào hàng đợi. Nếu đối số tùy chọn chặn là SimpleQueue3 [mặc định] và thời gian chờ là queue.Queue7 [mặc định], hãy chặn nếu cần cho đến khi có chỗ trống. Nếu thời gian chờ là một số dương, nó sẽ chặn nhiều nhất thời gian chờ giây và tăng Queue3 ngoại lệ nếu không có chỗ trống trong thời gian đó. Nếu không [khối là SimpleQueue4], hãy đặt một mục vào hàng đợi nếu có chỗ trống ngay lập tức, nếu không thì đưa ra Queue3 ngoại lệ [thời gian chờ được bỏ qua trong trường hợp đó]

Thay đổi trong phiên bản 3. 8. Nếu hàng đợi đã đóng, Queue1 được nâng lên thay vì Queue2

Queue3[đối tượng]

Tương đương với Queue4

Queue5[[chặn[, hết giờ]]]

Xóa và trả lại một mục khỏi hàng đợi. Nếu tùy chọn khối đối số là SimpleQueue3 [mặc định] và thời gian chờ là queue.Queue7 [mặc định], hãy chặn nếu cần cho đến khi có một mục. Nếu thời gian chờ là một số dương, thì nó sẽ chặn tối đa thời gian chờ giây và tăng Queue2 ngoại lệ nếu không có mặt hàng nào trong khoảng thời gian đó. Nếu không [khối là SimpleQueue4], hãy trả lại một mặt hàng nếu một mặt hàng có sẵn ngay lập tức, nếu không thì đưa ra Queue2 ngoại lệ [thời gian chờ được bỏ qua trong trường hợp đó]

Thay đổi trong phiên bản 3. 8. Nếu hàng đợi đã đóng, Queue1 được nâng lên thay vì task_done[]2

task_done[]3[]

Tương đương với task_done[]4

task_done[]5 có một số phương pháp bổ sung không có trong queue.Queue. Các phương thức này thường không cần thiết đối với hầu hết mã

task_done[]7[]

Cho biết rằng quy trình hiện tại sẽ không đưa thêm dữ liệu vào hàng đợi này. Chủ đề nền sẽ thoát sau khi nó đã xóa tất cả dữ liệu được lưu vào bộ đệm vào đường ống. Điều này được gọi tự động khi hàng đợi được thu gom rác

task_done[]8[]

Tham gia chủ đề nền. Điều này chỉ có thể được sử dụng sau khi task_done[]9 đã được gọi. Nó chặn cho đến khi luồng nền thoát ra, đảm bảo rằng tất cả dữ liệu trong bộ đệm đã được chuyển sang đường ống

Theo mặc định, nếu một quy trình không phải là người tạo hàng đợi thì khi thoát, nó sẽ cố gắng tham gia chuỗi nền của hàng đợi%u2019s. Quá trình có thể gọi join[]0 để khiến join[]1 không làm gì cả

join[]2[]

Ngăn chặn join[]1 chặn. Đặc biệt, điều này ngăn chuỗi nền tự động được nối khi quá trình thoát %u2013, xem join[]1

Một cái tên hay hơn cho phương pháp này có thể là join[]5. Nó có khả năng làm mất dữ liệu trong hàng đợi và bạn gần như chắc chắn sẽ không cần sử dụng nó. Nó thực sự chỉ ở đó nếu bạn cần quy trình hiện tại thoát ngay lập tức mà không cần chờ chuyển dữ liệu đã xử lý sang đường ống bên dưới và bạn không quan tâm đến dữ liệu bị mất

Ghi chú

 

Chức năng class%u2019s này yêu cầu triển khai semaphore được chia sẻ đang hoạt động trên hệ điều hành máy chủ. Nếu không có, chức năng trong lớp này sẽ bị vô hiệu hóa và cố gắng khởi tạo một Queue sẽ dẫn đến một join[]7.  

lớp học Queue9_______3_______

Đây là loại Queue được đơn giản hóa, rất giống với loại bị khóa SimpleQueue0

task_done[]7[]

Đóng hàng đợi. giải phóng nội lực

Một hàng đợi không được sử dụng nữa sau khi nó bị đóng. Ví dụ: các phương thức queue.Queue3, queue.Queue4 và queue.Queue5 không được gọi nữa

JoinableQueue9[]

Quay lại SimpleQueue3 nếu hàng đợi trống, SimpleQueue4 nếu không

Queue5[]

Xóa và trả lại một mục khỏi hàng đợi

queue.Queue5[mục]

Đặt mục vào hàng đợi

lớp học Queue9_______4_______[[cỡ tối đa]]

JoinableQueue, một lớp con Queue, là một hàng đợi có thêm các phương thức task_done[] và join[]

JoinableQueue7[]

Chỉ ra rằng một nhiệm vụ được xử lý trước đây đã hoàn thành. Được sử dụng bởi người tiêu dùng xếp hàng. Đối với mỗi queue.Queue3 được sử dụng để tìm nạp một tác vụ, lệnh gọi tiếp theo tới task_done[] báo cho hàng đợi rằng quá trình xử lý tác vụ đã hoàn tất

Nếu một join[] hiện đang chặn, nó sẽ tiếp tục khi tất cả các mục đã được xử lý [có nghĩa là đã nhận được một cuộc gọi _______7_______ cho mọi mục đã được queue.Queue4 vào hàng đợi]

Tăng một Queue1 nếu được gọi nhiều lần hơn số vật phẩm được đưa vào hàng đợi

Queue04[]

Chặn cho đến khi tất cả các mục trong hàng đợi đã được nhận và xử lý

Số lượng nhiệm vụ chưa hoàn thành tăng lên bất cứ khi nào một mục được thêm vào hàng đợi. Số lượng giảm xuống bất cứ khi nào người tiêu dùng gọi _______7_______ để cho biết rằng mặt hàng đã được lấy và mọi công việc trên mặt hàng đó đã hoàn tất. Khi số lượng nhiệm vụ chưa hoàn thành giảm xuống 0, join[] bỏ chặn

Đường ống trong Python là gì?

Ống là gì? . một đường ống [. ] chuyển kết quả của phương thức này sang phương thức khác. Tôi thích Pipe vì nó làm cho mã của tôi trông gọn gàng hơn khi áp dụng nhiều phương thức cho Python iterable. a Python library that enables you to use pipes in Python. A pipe [ | ] passes the results of one method to another method. I like Pipe because it makes my code look cleaner when applying multiple methods to a Python iterable.

Làm cách nào để chuyển nhiều đối số trong Python đa xử lý?

Bản đồ nhóm đa xử lý[] Nhiều đối số .
sử dụng hồ bơi. apply_async[] Thay vào đó
sử dụng hồ bơi. starmap[] Thay vào đó
Thay đổi chức năng mục tiêu thành giải nén đối số
Sử dụng hàm Wrapper để giải nén đối số

Forking trong đa xử lý là gì?

Khi một quy trình được rẽ nhánh tiến trình con kế thừa tất cả các biến giống nhau ở cùng trạng thái như trong quy trình cha . Sau đó, mỗi tiến trình con tiếp tục độc lập từ điểm rẽ nhánh. Nhóm chia các đối số giữa các trẻ em và chúng làm việc theo tuần tự.

Làm cách nào để sử dụng hàng đợi trong Python đa xử lý?

Đa xử lý. Hàng đợi có thể được sử dụng bằng cách tạo một thể hiện của lớp trước tiên . Điều này sẽ tạo ra một hàng đợi không giới hạn theo mặc định, nghĩa là một hàng đợi không có giới hạn về kích thước. Có thể tạo một lần tạo với giới hạn kích thước bằng cách chỉ định đối số “maxsize” thành một giá trị lớn hơn 0.

Chủ Đề