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 Queue
0 đố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ú
Queue
1 sử dụng các trường hợp ngoại lệ _______2_______2 và Queue
3 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 Queue
1 do đó bạn cần nhập chúng từ Queue
5
Cảnh báo
Nếu một quy trình bị giết bằng cách sử dụng Queue
6 hoặc Queue
7 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
Queue
9SimpleQueue
0[[hai mặt]]Trả về một cặp SimpleQueue
1 của SimpleQueue
2 đối tượng đại diện cho các đầu của một đường ống
Nếu hai chiều là SimpleQueue
3 [mặc định] thì đường ống là hai chiều. Nếu song công là SimpleQueue
4 thì đường ống là một chiều. SimpleQueue
5 chỉ có thể được sử dụng để nhận tin nhắn và SimpleQueue
6 chỉ có thể được sử dụng để gửi tin nhắn
Queue
9_______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ệ Queue
2 và Queue
3 thông thường từ thư viện chuẩn%u2019s mô-đun Queue
5 đượ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[]
JoinableQueue
6[]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 JoinableQueue
7 trên các nền tảng Unix như Mac OS X nơi JoinableQueue
8 không được triển khai
JoinableQueue
9[]Quay lại SimpleQueue
3 nếu hàng đợi trống, SimpleQueue
4 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.Queue
2[]Quay lại SimpleQueue
3 nếu hàng đợi đã đầy, SimpleQueue
4 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.Queue
5[obj[, block[, timeout]]]Đặt obj vào hàng đợi. Nếu đối số tùy chọn chặn là SimpleQueue
3 [mặc định] và thời gian chờ là queue.Queue
7 [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 Queue
3 ngoại lệ nếu không có chỗ trống trong thời gian đó. Nếu không [khối là SimpleQueue
4], 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 Queue
3 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, Queue
1 được nâng lên thay vì Queue
2
Queue
3[đối tượng]Tương đương với Queue
4
Queue
5[[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à SimpleQueue
3 [mặc định] và thời gian chờ là queue.Queue
7 [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 Queue
2 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à SimpleQueue
4], 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 Queue
2 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, Queue
1 đượ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.
Queue
9_______3_______Đây là loại Queue
được đơn giản hóa, rất giống với loại bị khóa SimpleQueue
0
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.Queue
3, queue.Queue
4 và queue.Queue
5 không được gọi nữa
JoinableQueue
9[]Quay lại SimpleQueue
3 nếu hàng đợi trống, SimpleQueue
4 nếu không
Queue
5[]Xóa và trả lại một mục khỏi hàng đợi
queue.Queue
5[mục]Đặt mục vào hàng đợi
lớp họcQueue
9_______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[]
JoinableQueue
7[]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.Queue
3 đượ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.Queue
4 vào hàng đợi]
Tăng một Queue
1 nếu được gọi nhiều lần hơn số vật phẩm được đưa vào hàng đợi
Queue
04[]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