From 18ec5f062db1fed187bbeca1680e2f62603c0f1a Mon Sep 17 00:00:00 2001 From: Matt Wang Date: Tue, 8 Oct 2024 02:25:03 +0800 Subject: [PATCH 1/2] translate Lock & RLock part of `library/threading.po` --- library/threading.po | 99 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 16 deletions(-) diff --git a/library/threading.po b/library/threading.po index 13f67b22f7..9ad9e1c1bb 100644 --- a/library/threading.po +++ b/library/threading.po @@ -673,7 +673,7 @@ msgstr "" #: ../../library/threading.rst:503 msgid "Lock Objects" -msgstr "" +msgstr "Lock 物件" #: ../../library/threading.rst:505 msgid "" @@ -682,6 +682,9 @@ msgid "" "synchronization primitive available, implemented directly by the :mod:" "`_thread` extension module." msgstr "" +"原始鎖 (primitive lock) 是一種同步原語 (synchronization primitive),在鎖定時" +"不屬於特定執行緒。在 Python 中,它是目前可用的最低階同步原語,直接由 :mod:" +"`_thread` 擴充模組實作。" #: ../../library/threading.rst:510 msgid "" @@ -696,10 +699,18 @@ msgid "" "state to unlocked and returns immediately. If an attempt is made to release " "an unlocked lock, a :exc:`RuntimeError` will be raised." msgstr "" +"原始鎖會處於兩種狀態之一:「鎖定 (locked)」或「未鎖定 (unclocked)」,建立時會" +"處於未鎖定狀態。它有兩個基本方法 :meth:`~Lock.acquire` 和 :meth:`~Lock." +"release`。當狀態為未鎖定時,:meth:`~Lock.acquire` 會將狀態變更為鎖定並立即回" +"傳。當狀態被鎖定時,:meth:`~Lock.acquire` 會阻塞 (block),直到另一個執行緒中" +"對 :meth:`~Lock.release` 的呼叫將其更改為未鎖定狀態,然後 :meth:`~Lock." +"acquire` 呼叫會將其重置為鎖定並回傳。:meth:`~Lock.release` 方法只能在鎖定狀態" +"下呼叫;它將狀態更改為未鎖定並立即回傳。如果嘗試釋放未鎖定的鎖,則會引發 :" +"exc:`RuntimeError`。" #: ../../library/threading.rst:521 msgid "Locks also support the :ref:`context management protocol `." -msgstr "" +msgstr "鎖也支援\\ :ref:`情境管理協定 `。" #: ../../library/threading.rst:523 msgid "" @@ -708,10 +719,13 @@ msgid "" "release` call resets the state to unlocked; which one of the waiting threads " "proceeds is not defined, and may vary across implementations." msgstr "" +"當多個執行緒阻塞在 :meth:`~Lock.acquire` 中等待狀態轉變為未鎖定,此時若呼叫 :" +"meth:`~Lock.release` 將狀態重置為未鎖定,則只會有一個執行緒繼續進行;哪一個等" +"待執行緒會繼續進行是未定義的,並且可能因實作而異。" #: ../../library/threading.rst:528 msgid "All methods are executed atomically." -msgstr "" +msgstr "所有方法均以最小操作方式 (atomically) 執行。" #: ../../library/threading.rst:533 msgid "" @@ -719,22 +733,28 @@ msgid "" "lock, subsequent attempts to acquire it block, until it is released; any " "thread may release it." msgstr "" +"實作原始鎖物件的類別。一旦執行緒獲得了鎖,後續再嘗試獲得它就會被阻塞,直到鎖" +"被釋放;任何執行緒都可以去釋放它。" #: ../../library/threading.rst:537 msgid "" "``Lock`` is now a class. In earlier Pythons, ``Lock`` was a factory function " "which returned an instance of the underlying private lock type." msgstr "" +"``Lock`` 現在是一個類別。在早期的 Python 中,``Lock`` 是一個會回傳底層私有鎖" +"型別實例的工廠函式。" #: ../../library/threading.rst:545 ../../library/threading.rst:636 msgid "Acquire a lock, blocking or non-blocking." -msgstr "" +msgstr "阻塞或非阻塞地取得鎖。" #: ../../library/threading.rst:547 msgid "" "When invoked with the *blocking* argument set to ``True`` (the default), " "block until the lock is unlocked, then set it to locked and return ``True``." msgstr "" +"當以 *blocking* 引數設為 ``True``\\ (預設值)來調用,將會阻塞直到鎖被解鎖," +"然後將其設為鎖定並回傳 ``True``。" #: ../../library/threading.rst:550 msgid "" @@ -742,6 +762,9 @@ msgid "" "a call with *blocking* set to ``True`` would block, return ``False`` " "immediately; otherwise, set the lock to locked and return ``True``." msgstr "" +"當以 *blocking* 引數設為 ``False`` 調用則不會阻塞。如果 *blocking* 設定為 " +"``True`` 的呼叫會阻塞,則立即回傳 ``False``;否則將鎖設為鎖定並回傳 " +"``True``。" #: ../../library/threading.rst:554 msgid "" @@ -751,29 +774,34 @@ msgid "" "specifies an unbounded wait. It is forbidden to specify a *timeout* when " "*blocking* is ``False``." msgstr "" +"當使用設定為正值的浮點 *timeout* 引數進行調用,只要持續無法取得鎖,最多會阻" +"塞 *timeout* 指定的秒數。``-1`` 的 *timeout* 引數代表指定為不會停止的等待。" +"當 *blocking* 為 ``False`` 時禁止指定 *timeout*。" #: ../../library/threading.rst:560 msgid "" "The return value is ``True`` if the lock is acquired successfully, ``False`` " "if not (for example if the *timeout* expired)." msgstr "" +"如果成功取得鎖,則回傳值為 ``True``,否則回傳值為 ``False``\\ (例如像是 " +"*timeout* 已逾期)。" #: ../../library/threading.rst:563 ../../library/threading.rst:674 #: ../../library/threading.rst:921 msgid "The *timeout* parameter is new." -msgstr "" +msgstr "新的 *timeout* 參數。" #: ../../library/threading.rst:566 msgid "" "Lock acquisition can now be interrupted by signals on POSIX if the " "underlying threading implementation supports it." -msgstr "" +msgstr "如果底層執行緒實作支援的話,鎖的獲取現在可以被 POSIX 上的訊號中斷。" #: ../../library/threading.rst:573 msgid "" "Release a lock. This can be called from any thread, not only the thread " "which has acquired the lock." -msgstr "" +msgstr "釋放鎖。這可以從任何執行緒呼叫,而不是只有獲得鎖的執行緒。" #: ../../library/threading.rst:576 msgid "" @@ -781,18 +809,20 @@ msgid "" "threads are blocked waiting for the lock to become unlocked, allow exactly " "one of them to proceed." msgstr "" +"當鎖被鎖定時,將其重置為未鎖定然後回傳。如果任何其他執行緒在等待鎖被解鎖時被" +"阻塞,只允許其中一個執行緒繼續進行。" #: ../../library/threading.rst:580 msgid "When invoked on an unlocked lock, a :exc:`RuntimeError` is raised." -msgstr "" +msgstr "當在未鎖定的鎖上調用時,會引發 :exc:`RuntimeError`" #: ../../library/threading.rst:582 ../../library/threading.rst:690 msgid "There is no return value." -msgstr "" +msgstr "沒有回傳值。" #: ../../library/threading.rst:586 msgid "Return ``True`` if the lock is acquired." -msgstr "" +msgstr "如果有取得了鎖,則回傳 ``True``。" #: ../../library/threading.rst:593 msgid "RLock Objects" @@ -806,12 +836,18 @@ msgid "" "state used by primitive locks. In the locked state, some thread owns the " "lock; in the unlocked state, no thread owns it." msgstr "" +"可重入鎖 (reentrant lock) 是一種同步原語,同一執行緒可以多次取得它。在內部," +"除了原始鎖使用的鎖定/未鎖定狀態之外,它還使用「所屬執行緒 (owning thread)」和" +"「遞迴等級 (recursion level)」的概念。在鎖定狀態下,某個執行緒會擁有鎖;在未" +"鎖定狀態下則沒有執行緒擁有它。" #: ../../library/threading.rst:601 msgid "" "Threads call a lock's :meth:`~RLock.acquire` method to lock it, and its :" "meth:`~Lock.release` method to unlock it." msgstr "" +"執行緒呼叫鎖的 :meth:`~RLock.acquire` 方法來鎖定它,並呼叫它的 :meth:`~Lock." +"release` 方法來解鎖它。" #: ../../library/threading.rst:606 msgid "" @@ -820,6 +856,9 @@ msgid "" "meth:`~RLock.acquire` and :meth:`~RLock.release` to handle acquiring and " "releasing the lock for a block of code." msgstr "" +"可重入鎖支援\\ :ref:`情境管理協定`,因此建議使用 :keyword:`with` " +"而不是手動呼叫 :meth:`~RLock.acquire` 和 :meth:`~RLock.release` 來對程式碼區" +"塊處理鎖的獲得和釋放。" #: ../../library/threading.rst:611 msgid "" @@ -829,6 +868,10 @@ msgid "" "pair) resets the lock to an unlocked state and allows another thread blocked " "in :meth:`~RLock.acquire` to proceed." msgstr "" +"RLock 的 :meth:`~RLock.acquire`/:meth:`~RLock.release` 呼叫成對組合可以嵌套使" +"用,這與Lock 的 :meth:`~Lock.acquire`/:meth:`~Lock.release` 不同。只有最後一" +"個 :meth:`~RLock.release`\\ (最外面一對的 :meth:`~Lock.release`)會將鎖重置" +"為未鎖定狀態,並允許在 :meth:`~RLock.acquire` 中阻塞的另一個執行緒繼續進行。" #: ../../library/threading.rst:617 msgid "" @@ -837,6 +880,9 @@ msgid "" "Failing to call release as many times the lock has been acquired can lead to " "deadlock." msgstr "" +":meth:`~RLock.acquire`/:meth:`~RLock.release` 必須成對使用:每次獲得都必須在" +"已獲得鎖的執行緒中有一個釋放。如果鎖釋放的次數不能和獲取的次數一樣的話,可能" +"會導致死鎖 (deadlock)。" #: ../../library/threading.rst:624 msgid "" @@ -845,6 +891,9 @@ msgid "" "reentrant lock, the same thread may acquire it again without blocking; the " "thread must release it once for each time it has acquired it." msgstr "" +"此類別實作了可重入鎖物件。可重入鎖必須由獲得它的執行緒釋放。一旦一個執行緒獲" +"得了可重入鎖,同一個執行緒可以再次獲得它而不會阻塞;執行緒每次獲得它也都必須" +"釋放它一次。" #: ../../library/threading.rst:629 msgid "" @@ -852,31 +901,37 @@ msgid "" "of the most efficient version of the concrete RLock class that is supported " "by the platform." msgstr "" +"請注意,``RLock`` 實際上是一個工廠函式,它會回傳平台有支援的特定 RLock 類別的" +"最有效版本的實例。" #: ../../library/threading.rst:640 msgid ":ref:`Using RLock as a context manager `" -msgstr "" +msgstr ":ref:`將 RLock 用作為情境管理器 `" #: ../../library/threading.rst:641 msgid "" "Recommended over manual :meth:`!acquire` and :meth:`release` calls whenever " "practical." msgstr "" +"若是使用場景合理,和手動呼叫 :meth:`!acquire` 和 :meth:`release` 相比,會是更" +"為推薦的使用方式。" #: ../../library/threading.rst:645 msgid "" "When invoked with the *blocking* argument set to ``True`` (the default):" -msgstr "" +msgstr "當以 *blocking* 引數設為 ``True``\\ (預設值)來調用:" #: ../../library/threading.rst:647 ../../library/threading.rst:659 msgid "If no thread owns the lock, acquire the lock and return immediately." -msgstr "" +msgstr "如果沒有執行緒擁有鎖,則獲得鎖並立即回傳。" #: ../../library/threading.rst:649 msgid "" "If another thread owns the lock, block until we are able to acquire lock, or " "*timeout*, if set to a positive float value." msgstr "" +"如果另一個執行緒擁有鎖,則阻塞直到能夠取得鎖,或者達到 *timeout*\\ (如果設定" +"為正浮點值)。" #: ../../library/threading.rst:652 msgid "" @@ -885,20 +940,23 @@ msgid "" "RLock`; :class:`Lock` handles this case the same as the previous, blocking " "until the lock can be acquired." msgstr "" +"如果同一個執行緒擁有鎖,則再次取得鎖,並立即回傳。這就是 :class:`Lock` 和 :" +"class:`!RLock` 之間的差別;:class:`Lock` 處理方式與上一種情況相同,會阻塞直到" +"能夠取得鎖。" #: ../../library/threading.rst:657 msgid "When invoked with the *blocking* argument set to ``False``:" -msgstr "" +msgstr "當以 *blocking* 引數設為 ``False`` 來調用:" #: ../../library/threading.rst:661 msgid "If another thread owns the lock, return immediately." -msgstr "" +msgstr "如果另一個執行緒擁有該鎖,則立即回傳。" #: ../../library/threading.rst:663 msgid "" "If the same thread owns the lock, acquire the lock again and return " "immediately." -msgstr "" +msgstr "如果同一個執行緒擁有鎖,則再次取得鎖並立即回傳。" #: ../../library/threading.rst:666 msgid "" @@ -906,6 +964,8 @@ msgid "" "If the thread was unable to acquire the lock (i.e. if not blocking or the " "timeout was reached) return ``False``." msgstr "" +"在所有情況下,如果執行緒能夠取得鎖則回傳 ``True``。如果執行緒無法取得鎖(即沒" +"有阻塞或已達超時限制)則回傳 ``False``。" #: ../../library/threading.rst:670 msgid "" @@ -913,6 +973,8 @@ msgid "" "times may lead to deadlock. Consider using :class:`!RLock` as a context " "manager rather than calling acquire/release directly." msgstr "" +"如果多次呼叫,又未能呼叫相同次數的 :meth:`~RLock.release`,則可能會導致死鎖。" +"考慮將 :class:`!RLock` 作為情境管理器使用,而不是直接呼叫 acquire/release。" #: ../../library/threading.rst:680 msgid "" @@ -922,6 +984,9 @@ msgid "" "exactly one of them to proceed. If after the decrement the recursion level " "is still nonzero, the lock remains locked and owned by the calling thread." msgstr "" +"釋放鎖並減少遞迴等級。如果被減至零,則將鎖重置為未鎖定(不屬於任何執行緒)," +"並且如果任何其他執行緒被阻塞以等待鎖變成未鎖定狀態,則僅允許其中一個執行緒繼" +"續進行。如果遞減後遞迴等級仍然非零,則鎖會保持鎖定並由呼叫它的執行緒所擁有。" #: ../../library/threading.rst:686 msgid "" @@ -929,6 +994,8 @@ msgid "" "`RuntimeError` is raised if this method is called when the lock is not " "acquired." msgstr "" +"僅當呼叫的執行緒擁有鎖時才能呼叫此方法。如果在未取得鎖時呼叫此方法則會引發 :" +"exc:`RuntimeError`。" #: ../../library/threading.rst:696 msgid "Condition Objects" From 8c391a3673b5d4b5e39a893ec87d9e904b2a498a Mon Sep 17 00:00:00 2001 From: "Wei-Hsiang (Matt) Wang" Date: Tue, 8 Oct 2024 11:12:14 +0800 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Josix --- library/threading.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/threading.po b/library/threading.po index 9ad9e1c1bb..35adbe0595 100644 --- a/library/threading.po +++ b/library/threading.po @@ -725,7 +725,7 @@ msgstr "" #: ../../library/threading.rst:528 msgid "All methods are executed atomically." -msgstr "所有方法均以最小操作方式 (atomically) 執行。" +msgstr "所有方法均以最小不可分割的操作方式 (atomically) 執行。" #: ../../library/threading.rst:533 msgid "" @@ -869,7 +869,7 @@ msgid "" "in :meth:`~RLock.acquire` to proceed." msgstr "" "RLock 的 :meth:`~RLock.acquire`/:meth:`~RLock.release` 呼叫成對組合可以嵌套使" -"用,這與Lock 的 :meth:`~Lock.acquire`/:meth:`~Lock.release` 不同。只有最後一" +"用,這與 Lock 的 :meth:`~Lock.acquire`/:meth:`~Lock.release` 不同。只有最後一" "個 :meth:`~RLock.release`\\ (最外面一對的 :meth:`~Lock.release`)會將鎖重置" "為未鎖定狀態,並允許在 :meth:`~RLock.acquire` 中阻塞的另一個執行緒繼續進行。" @@ -902,7 +902,7 @@ msgid "" "by the platform." msgstr "" "請注意,``RLock`` 實際上是一個工廠函式,它會回傳平台有支援的特定 RLock 類別的" -"最有效版本的實例。" +"最高效率版本的實例。" #: ../../library/threading.rst:640 msgid ":ref:`Using RLock as a context manager `" pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy