Mã nguồn: lib/queue.py Lib/queue.py Show Mô-đun Mô -đun thực hiện ba loại hàng đợi, chỉ khác nhau theo thứ tự mà các mục được truy xuất. Trong một hàng đợi FIFO, các nhiệm vụ đầu tiên được thêm vào là lần đầu tiên được truy xuất. Trong một hàng đợi Lifo, mục được thêm gần đây nhất là lần đầu tiên được truy xuất (hoạt động như một ngăn xếp). Với hàng đợi ưu tiên, các mục được giữ được sắp xếp (sử dụng mô -đun Trong nội bộ, ba loại hàng đợi sử dụng khóa để chặn các luồng cạnh tranh tạm thời; Tuy nhiên, chúng không được thiết kế để xử lý sự tái lập trong một luồng. Ngoài ra, mô -đun thực hiện một loại hàng đợi FIFO đơn giản, Mô -đun Người xây dựng cho một hàng đợi FIFO. MaxSize là một số nguyên đặt giới hạn trên đối với số lượng mục có thể được đặt trong hàng đợi. Chèn sẽ chặn khi đã đạt được kích thước này, cho đến khi các mục hàng đợi được tiêu thụ. Nếu tối đa nhỏ hơn hoặc bằng 0, kích thước hàng đợi là vô hạn. classqueue.lifoqueue (maxsize = 0) ¶ queue.LifoQueue(maxsize=0)¶Người xây dựng cho một hàng đợi LIFO. MaxSize là một số nguyên đặt giới hạn trên đối với số lượng mục có thể được đặt trong hàng đợi. Chèn sẽ chặn khi đã đạt được kích thước này, cho đến khi các mục hàng đợi được tiêu thụ. Nếu tối đa nhỏ hơn hoặc bằng 0, kích thước hàng đợi là vô hạn. classqueue.priorityqueue (MaxSize = 0) ¶queue.PriorityQueue(maxsize=0)¶Người xây dựng cho một hàng đợi ưu tiên. MaxSize là một số nguyên đặt giới hạn trên đối với số lượng mục có thể được đặt trong hàng đợi. Chèn sẽ chặn khi đã đạt được kích thước này, cho đến khi các mục hàng đợi được tiêu thụ. Nếu tối đa nhỏ hơn hoặc bằng 0, kích thước hàng đợi là vô hạn. Các mục có giá trị thấp nhất được lấy đầu tiên (mục có giá trị thấp nhất là bản được trả lại bởi Nếu các phần tử dữ liệu không thể so sánh được, dữ liệu có thể được gói trong một lớp bỏ qua mục dữ liệu và chỉ so sánh số ưu tiên: from dataclasses import dataclass, field from typing import Any @dataclass(order=True) class PrioritizedItem: priority: int item: Any=field(compare=False)classqueue.simplequeue¶ queue.SimpleQueue¶ Người xây dựng cho một hàng đợi FIFO không giới hạn. Hàng đợi đơn giản thiếu chức năng nâng cao như theo dõi nhiệm vụ. Mới trong phiên bản 3.7. Exceptionqueue.empty¶ queue.Empty¶Ngoại lệ được nâng lên khi không chặn import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')0) được gọi trên một đối tượng Queue trống. ngoại lệ.Full
queue.Full¶Ngoại lệ được nâng lên khi không chặn import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')2 (hoặc import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')3) được gọi trên một đối tượng Queue đã đầy.Hàng đợi đối tượngCác đối tượng hàng đợi ( import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')6 hoặc import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')7) cung cấp các phương thức công khai được mô tả dưới đây. Hàng đợi.qsize () ¶qsize()¶ Trả lại kích thước gần đúng của hàng đợi. Lưu ý, qsize ()> 0 không đảm bảo rằng một get () tiếp theo sẽ không chặn, cũng không phải Qsize () Trả lại import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')8 Nếu hàng đợi trống, import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')9 khác. Nếu trống () trả về import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')8, nó không đảm bảo rằng một cuộc gọi tiếp theo để đặt () sẽ không chặn. Tương tự, nếu trống () trả về import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')9, nó không đảm bảo rằng một cuộc gọi tiếp theo để nhận () sẽ không chặn. Hàng đợi.full () ¶full()¶ Trả lại import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')8 Nếu hàng đợi đầy, import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')9 khác. Nếu Full () trả về import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')8, nó không đảm bảo rằng một cuộc gọi tiếp theo để nhận () sẽ không chặn. Tương tự, nếu Full () trả về import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')9, nó không đảm bảo rằng một cuộc gọi tiếp theo để đặt () sẽ không chặn. Hàng đợi.put (item, block = true, thời gian chờ = none) ¶put(item, block=True, timeout=None)¶ Đặt mục vào hàng đợi. Nếu khối args tùy chọn là đúng và thời gian chờ là Tương đương với Hủy bỏ và trả lại một mục từ hàng đợi. Nếu khối args tùy chọn là đúng và thời gian chờ là Trước 3.0 trên các hệ thống POSIX và đối với tất cả các phiên bản trên Windows, nếu khối là đúng và thời gian chờ là Tương đương với Hai phương pháp được cung cấp để hỗ trợ theo dõi xem các tác vụ Enqueued có được xử lý đầy đủ bởi các chủ đề tiêu dùng daemon hay không. Hàng đợi.task_done () ¶task_done()¶Chỉ ra rằng một nhiệm vụ trước đây là hoàn thành. Được sử dụng bởi các chủ đề tiêu dùng hàng đợi. Đối với mỗi Nếu import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')2 vào hàng đợi). Tăng Các khối cho đến khi tất cả các mục trong hàng đợi đã được xử lý và xử lý. Số lượng các nhiệm vụ chưa hoàn thành tăng lên bất cứ khi nào một mặt hàng được thêm vào hàng đợi. Số lượng đi xuống bất cứ khi nào một luồng người tiêu dùng gọi Ví dụ về cách chờ hoàn thành các nhiệm vụ enqueued: import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed') Đơn giản đối tượng
Trả lại kích thước gần đúng của hàng đợi. Lưu ý, qsize ()> 0 không đảm bảo rằng một get () tiếp theo sẽ không chặn. Đơn giản.Empty () ¶empty()¶Trả lại import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')8 Nếu hàng đợi trống, import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')9 khác. Nếu trống () trả về import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')9, nó không đảm bảo rằng một cuộc gọi tiếp theo để nhận () sẽ không chặn. Đơn giảnput(item, block=True, timeout=None)¶ Đặt mục vào hàng đợi. Phương pháp không bao giờ chặn và luôn luôn thành công (ngoại trừ các lỗi cấp thấp tiềm năng như không phân bổ bộ nhớ). Khối ARGS tùy chọn và thời gian chờ bị bỏ qua và chỉ được cung cấp để tương thích với Chi tiết triển khai CPYThon: Phương pháp này có triển khai C được tái lập. Đó là, một cuộc gọi import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')2 or get() call can be interrupted by another import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # Turn-on the worker thread. threading.Thread(target=worker, daemon=True).start() # Send thirty task requests to the worker. for item in range(30): q.put(item) # Block until all tasks are done. q.join() print('All work completed')2 call in the same thread without deadlocking or corrupting internal state inside the queue. This makes it appropriate for use in destructors such as SimpleQueue 2 methods or
SimpleQueue 3 callbacks.
Đơn giản.put_nowait (mục) ¶put_nowait(item)¶Tương đương với Hủy bỏ và trả lại một mục từ hàng đợi. Nếu khối args tùy chọn là đúng và thời gian chờ là Tương đương với Xem thêm Lớpqueue 0Một lớp hàng đợi để sử dụng trong bối cảnh đa xử lý (chứ không phải đa luồng).
Python có xếp chồng và xếp hàng không?Ngăn xếp và hàng đợi là cấu trúc dữ liệu sớm nhất được xác định trong khoa học máy tính. Một danh sách Python đơn giản cũng có thể hoạt động như một hàng đợi và xếp chồng. Một hàng đợi tuân theo quy tắc của FIFO (đầu tiên trong lần đầu tiên) và được sử dụng trong lập trình để sắp xếp. Nó là phổ biến cho các ngăn xếp và hàng đợi được thực hiện với một mảng hoặc danh sách được liên kết.A simple Python list can act as a queue and stack as well. A queue follows FIFO rule (First In First Out) and used in programming for sorting. It is common for stacks and queues to be implemented with an array or linked list.
Hàng đợi trong Python là gì?Hàng đợi là một tập hợp các đối tượng hỗ trợ ngữ nghĩa từ đầu tiên, đầu tiên (FIFO) để chèn và xóa.Các hoạt động chèn và xóa đôi khi được gọi là enqueue và dequeue.Không giống như danh sách hoặc mảng, hàng đợi thường không cho phép truy cập ngẫu nhiên vào các đối tượng mà chúng chứa.a collection of objects that supports fast first-in, first-out (FIFO) semantics for inserts and deletes. The insert and delete operations sometimes called enqueue and dequeue. Unlike lists or arrays, queues typically don't allow for random access to the objects they contain.
Danh sách Python là một ngăn xếp hay hàng đợi?Danh sách cấu trúc dữ liệu tích hợp của Python có thể được sử dụng như một ngăn xếp.Thay vì push (), append () được sử dụng để thêm các phần tử vào đầu ngăn xếp trong khi pop () loại bỏ phần tử theo thứ tự LIFO.Thật không may, danh sách có một vài thiếu sót.list can be used as a stack. Instead of push(), append() is used to add elements to the top of the stack while pop() removes the element in LIFO order. Unfortunately, the list has a few shortcomings.
Hàng đợi có phải là một mô -đun trong Python không?Mô-đun hàng đợi thực hiện hàng đợi đa nhà sản xuất, nhiều người tiêu dùng.Nó đặc biệt hữu ích trong lập trình luồng khi thông tin phải được trao đổi một cách an toàn giữa nhiều luồng.Lớp xếp hàng trong mô -đun này thực hiện tất cả các ngữ nghĩa khóa cần thiết.. It is especially useful in threaded programming when information must be exchanged safely between multiple threads. The Queue class in this module implements all the required locking semantics. |