# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: # Adrian Liaw , 2018 # Matt Wang , 2022 msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-23 00:15+0000\n" "PO-Revision-Date: 2022-02-20 18:34+0800\n" "Last-Translator: Matt Wang \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" "tw)\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.0.1\n" #: ../../library/asyncio-queue.rst:7 msgid "Queues" msgstr "佇列 (Queues)" #: ../../library/asyncio-queue.rst:9 msgid "**Source code:** :source:`Lib/asyncio/queues.py`" msgstr "**原始碼:**\\ :source:`Lib/asyncio/queues.py`" #: ../../library/asyncio-queue.rst:13 msgid "" "asyncio queues are designed to be similar to classes of the :mod:`queue` " "module. Although asyncio queues are not thread-safe, they are designed to " "be used specifically in async/await code." msgstr "" "asyncio 佇列被設計成與 :mod:`queue` 模組類似。儘管 asyncio 佇列不支援執行緒安" "全 (thread-safe),但他們是被設計來專用於 async/await 程式。" #: ../../library/asyncio-queue.rst:17 msgid "" "Note that methods of asyncio queues don't have a *timeout* parameter; use :" "func:`asyncio.wait_for` function to do queue operations with a timeout." msgstr "" "注意 asyncio 的佇列沒有 *timeout* 參數;請使用 :func:`asyncio.wait_for` 函式" "來為佇列新增具有超時 (timeout) 設定的操作。" #: ../../library/asyncio-queue.rst:21 msgid "See also the `Examples`_ section below." msgstr "另請參閱下方 `Examples`_。" #: ../../library/asyncio-queue.rst:24 msgid "Queue" msgstr "Queue" #: ../../library/asyncio-queue.rst:28 msgid "A first in, first out (FIFO) queue." msgstr "先進先出 (FIFO) 佇列。" #: ../../library/asyncio-queue.rst:30 msgid "" "If *maxsize* is less than or equal to zero, the queue size is infinite. If " "it is an integer greater than ``0``, then ``await put()`` blocks when the " "queue reaches *maxsize* until an item is removed by :meth:`get`." msgstr "" "如果 *maxsize* 小於或等於零,則佇列大小是無限制的。如果是大於 ``0`` 的整數," "則當佇列達到 *maxsize* 時,``await put()`` 將會阻塞 (block),直到某個元素被 :" "meth:`get` 取出。" #: ../../library/asyncio-queue.rst:35 msgid "" "Unlike the standard library threading :mod:`queue`, the size of the queue is " "always known and can be returned by calling the :meth:`qsize` method." msgstr "" "不像標準函式庫中執行緒類型的 :mod:`queue`,佇列的大小一直是已知的,可以透過呼" "叫 :meth:`qsize` 方法回傳。" #: ../../library/asyncio-queue.rst:39 msgid "Removed the *loop* parameter." msgstr "移除 *loop* 參數。" #: ../../library/asyncio-queue.rst:43 msgid "This class is :ref:`not thread safe `." msgstr "這個類別是\\ :ref:`不支援執行緒安全的 `。" #: ../../library/asyncio-queue.rst:47 msgid "Number of items allowed in the queue." msgstr "佇列中可存放的元素數量。" #: ../../library/asyncio-queue.rst:51 msgid "Return ``True`` if the queue is empty, ``False`` otherwise." msgstr "如果佇列為空則回傳 ``True``,否則回傳 ``False``。" #: ../../library/asyncio-queue.rst:55 msgid "Return ``True`` if there are :attr:`maxsize` items in the queue." msgstr "如果有 :attr:`maxsize` 個條目在佇列中,則回傳 ``True``。" #: ../../library/asyncio-queue.rst:57 msgid "" "If the queue was initialized with ``maxsize=0`` (the default), then :meth:" "`full` never returns ``True``." msgstr "" "如果佇列用 ``maxsize=0`` (預設)初始化,則 :meth:`full` 永遠不會回傳 " "``True``。" #: ../../library/asyncio-queue.rst:63 msgid "" "Remove and return an item from the queue. If queue is empty, wait until an " "item is available." msgstr "從佇列中刪除並回傳一個元素。如果佇列為空,則持續等待直到佇列中有元素。" #: ../../library/asyncio-queue.rst:66 msgid "" "Raises :exc:`QueueShutDown` if the queue has been shut down and is empty, or " "if the queue has been shut down immediately." msgstr "" #: ../../library/asyncio-queue.rst:71 msgid "" "Return an item if one is immediately available, else raise :exc:`QueueEmpty`." msgstr "如果佇列內有值則立即回傳佇列中的元素,否則引發 :exc:`QueueEmpty`。" #: ../../library/asyncio-queue.rst:77 msgid "Block until all items in the queue have been received and processed." msgstr "持續阻塞直到佇列中所有的元素都被接收和處理完畢。" #: ../../library/asyncio-queue.rst:79 msgid "" "The count of unfinished tasks goes up whenever an item is added to the " "queue. The count goes down whenever a consumer coroutine calls :meth:" "`task_done` to indicate that the item was retrieved and all work on it is " "complete. When the count of unfinished tasks drops to zero, :meth:`join` " "unblocks." msgstr "" "當條目新增到佇列的時候,未完成任務的計數就會增加。每當一個消耗者 (consumer) " "協程呼叫 :meth:`task_done`,表示這個條目已經被取回且被它包含的所有工作都已完" "成,未完成任務計數就會減少。當未完成計數降到零的時候,:meth:`join` 阻塞會被解" "除 (unblock)。" #: ../../library/asyncio-queue.rst:88 msgid "" "Put an item into the queue. If the queue is full, wait until a free slot is " "available before adding the item." msgstr "" "將一個元素放進佇列。如果佇列滿了,在新增元素之前,會持續等待直到有空閒插槽 " "(free slot) 能被使用。" #: ../../library/asyncio-queue.rst:91 msgid "Raises :exc:`QueueShutDown` if the queue has been shut down." msgstr "如果佇列已經被關閉,則引發 :exc:`QueueShutDown`。" #: ../../library/asyncio-queue.rst:95 msgid "Put an item into the queue without blocking." msgstr "不阻塞地將一個元素放入佇列。" #: ../../library/asyncio-queue.rst:97 msgid "If no free slot is immediately available, raise :exc:`QueueFull`." msgstr "如果沒有立即可用的空閒插槽,引發 :exc:`QueueFull`。" #: ../../library/asyncio-queue.rst:101 msgid "Return the number of items in the queue." msgstr "回傳佇列中的元素數量。" #: ../../library/asyncio-queue.rst:105 msgid "" "Shut down the queue, making :meth:`~Queue.get` and :meth:`~Queue.put` raise :" "exc:`QueueShutDown`." msgstr "" #: ../../library/asyncio-queue.rst:108 msgid "" "By default, :meth:`~Queue.get` on a shut down queue will only raise once the " "queue is empty. Set *immediate* to true to make :meth:`~Queue.get` raise " "immediately instead." msgstr "" #: ../../library/asyncio-queue.rst:112 msgid "" "All blocked callers of :meth:`~Queue.put` and :meth:`~Queue.get` will be " "unblocked. If *immediate* is true, a task will be marked as done for each " "remaining item in the queue, which may unblock callers of :meth:`~Queue." "join`." msgstr "" #: ../../library/asyncio-queue.rst:121 msgid "Indicate that a formerly enqueued work item is complete." msgstr "表示前面一個排隊的工作項目已經完成。" #: ../../library/asyncio-queue.rst:123 msgid "" "Used by queue consumers. For each :meth:`~Queue.get` used to fetch a work " "item, a subsequent call to :meth:`task_done` tells the queue that the " "processing on the work item is complete." msgstr "" "由佇列消耗者使用。對於每個用於取得一個工作項目的 :meth:`~Queue.get`,接續的 :" "meth:`task_done` 呼叫會告訴佇列這個工作項目的處理已經完成。" #: ../../library/asyncio-queue.rst:127 msgid "" "If a :meth:`join` is currently blocking, it will resume when all items have " "been processed (meaning that a :meth:`task_done` call was received for every " "item that had been :meth:`~Queue.put` into the queue)." msgstr "" "如果 :meth:`join` 目前正在阻塞,在所有項目都被處理後會解除阻塞(意味著每個" "以 :meth:`~Queue.put` 放進佇列的條目都會收到一個 :meth:`task_done`)。" #: ../../library/asyncio-queue.rst:132 msgid "" "``shutdown(immediate=True)`` calls :meth:`task_done` for each remaining item " "in the queue." msgstr "" #: ../../library/asyncio-queue.rst:135 msgid "" "Raises :exc:`ValueError` if called more times than there were items placed " "in the queue." msgstr "如果被呼叫的次數多於放入佇列中的項目數量,將引發 :exc:`ValueError`。" #: ../../library/asyncio-queue.rst:140 msgid "Priority Queue" msgstr "Priority Queue(優先佇列)" #: ../../library/asyncio-queue.rst:144 msgid "" "A variant of :class:`Queue`; retrieves entries in priority order (lowest " "first)." msgstr ":class:`Queue` 的變形;按優先順序取出條目 (最小的先取出)。" #: ../../library/asyncio-queue.rst:147 msgid "Entries are typically tuples of the form ``(priority_number, data)``." msgstr "條目通常是 ``(priority_number, data)`` 形式的 tuple(元組)。" #: ../../library/asyncio-queue.rst:152 msgid "LIFO Queue" msgstr "LIFO Queue" #: ../../library/asyncio-queue.rst:156 msgid "" "A variant of :class:`Queue` that retrieves most recently added entries first " "(last in, first out)." msgstr ":class:`Queue` 的變形,先取出最近新增的條目(後進先出)。" #: ../../library/asyncio-queue.rst:161 msgid "Exceptions" msgstr "例外" #: ../../library/asyncio-queue.rst:165 msgid "" "This exception is raised when the :meth:`~Queue.get_nowait` method is called " "on an empty queue." msgstr "當佇列為空的時候,呼叫 :meth:`~Queue.get_nowait` 方法會引發這個例外。" #: ../../library/asyncio-queue.rst:171 msgid "" "Exception raised when the :meth:`~Queue.put_nowait` method is called on a " "queue that has reached its *maxsize*." msgstr "" "當佇列中條目數量已經達到它的 *maxsize* 時,呼叫 :meth:`~Queue.put_nowait` 方" "法會引發這個例外。" #: ../../library/asyncio-queue.rst:177 msgid "" "Exception raised when :meth:`~Queue.put` or :meth:`~Queue.get` is called on " "a queue which has been shut down." msgstr "" #: ../../library/asyncio-queue.rst:184 msgid "Examples" msgstr "範例" #: ../../library/asyncio-queue.rst:188 msgid "" "Queues can be used to distribute workload between several concurrent tasks::" msgstr "佇列能被用於多個並行任務的工作分配:" #: ../../library/asyncio-queue.rst:191 msgid "" "import asyncio\n" "import random\n" "import time\n" "\n" "\n" "async def worker(name, queue):\n" " while True:\n" " # Get a \"work item\" out of the queue.\n" " sleep_for = await queue.get()\n" "\n" " # Sleep for the \"sleep_for\" seconds.\n" " await asyncio.sleep(sleep_for)\n" "\n" " # Notify the queue that the \"work item\" has been processed.\n" " queue.task_done()\n" "\n" " print(f'{name} has slept for {sleep_for:.2f} seconds')\n" "\n" "\n" "async def main():\n" " # Create a queue that we will use to store our \"workload\".\n" " queue = asyncio.Queue()\n" "\n" " # Generate random timings and put them into the queue.\n" " total_sleep_time = 0\n" " for _ in range(20):\n" " sleep_for = random.uniform(0.05, 1.0)\n" " total_sleep_time += sleep_for\n" " queue.put_nowait(sleep_for)\n" "\n" " # Create three worker tasks to process the queue concurrently.\n" " tasks = []\n" " for i in range(3):\n" " task = asyncio.create_task(worker(f'worker-{i}', queue))\n" " tasks.append(task)\n" "\n" " # Wait until the queue is fully processed.\n" " started_at = time.monotonic()\n" " await queue.join()\n" " total_slept_for = time.monotonic() - started_at\n" "\n" " # Cancel our worker tasks.\n" " for task in tasks:\n" " task.cancel()\n" " # Wait until all worker tasks are cancelled.\n" " await asyncio.gather(*tasks, return_exceptions=True)\n" "\n" " print('====')\n" " print(f'3 workers slept in parallel for {total_slept_for:.2f} seconds')\n" " print(f'total expected sleep time: {total_sleep_time:.2f} seconds')\n" "\n" "\n" "asyncio.run(main())" msgstr ""