」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Python 線程模組快速指南及範例

Python 線程模組快速指南及範例

發佈於2024-09-18
瀏覽:551

A Quick Guide to the Python threading Module with Examples

介紹

Python 中的線程模組提供了一個高級介面來創建和管理線程,使您能夠並發運行程式碼。這對於可以並行執行的任務(例如 I/O 密集型操作)特別有用。以下列出了threading模組中常用的方法和函數,並附有簡要範例。

1. 線程()

Thread 類別是執行緒模組的核心。您可以使用此類建立和啟動新線程。

import threading

def print_numbers():
    for i in range(5):
        print(i)

t = threading.Thread(target=print_numbers)
t.start()  # Starts a new thread
t.join()   # Waits for the thread to finish

2. 開始()

啟動線程的活動。

t = threading.Thread(target=print_numbers)
t.start()  # Runs the target function in a separate thread

3. 加入([超時])

阻塞呼叫線程,直到呼叫 join() 方法的線程終止。您可以選擇指定逾時。

t = threading.Thread(target=print_numbers)
t.start()
t.join(2)  # Waits up to 2 seconds for the thread to finish

4.is_alive()

如果執行緒仍在運行,則傳回 True。

t = threading.Thread(target=print_numbers)
t.start()
print(t.is_alive())  # True if the thread is still running

5. 當前線程()

傳回目前Thread對象,代表呼叫執行緒。

import threading

def print_current_thread():
    print(threading.current_thread())

t = threading.Thread(target=print_current_thread)
t.start()  # Prints the current thread info

6. 枚舉()

傳回目前活動的所有 Thread 物件的清單。

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_numbers)
t1.start()
t2.start()

print(threading.enumerate())  # Lists all active threads

7. 活動計數()

傳回目前存活的Thread物件的數量。

print(threading.active_count())  # Returns the number of active threads

8. 鎖定()

Lock 物件是一個原始鎖,用於防止競爭條件。您可以使用它來確保一次只有一個執行緒存取共享資源。

lock = threading.Lock()

def thread_safe_function():
    with lock:  # Acquires the lock
        # Critical section
        print("Thread-safe code")

t = threading.Thread(target=thread_safe_function)
t.start()

9. RLock()

可重入鎖允許執行緒多次 acquire() 鎖,而不會阻塞自身。

lock = threading.RLock()

def reentrant_function():
    with lock:
        with lock:  # Same thread can acquire the lock again
            print("Reentrant lock example")

t = threading.Thread(target=reentrant_function)
t.start()

10. 條件()

Condition 物件允許線程等待滿足某些條件。

condition = threading.Condition()

def thread_wait():
    with condition:
        condition.wait()  # Wait for the condition
        print("Condition met")

def thread_notify():
    with condition:
        condition.notify()  # Notify the waiting thread

t1 = threading.Thread(target=thread_wait)
t2 = threading.Thread(target=thread_notify)
t1.start()
t2.start()

11. 事件()

Event 物件用於在執行緒之間發出訊號。一個線程可以等待事件被設置,另一個線程可以設置該事件。

event = threading.Event()

def wait_for_event():
    event.wait()  # Wait until the event is set
    print("Event has been set")

t = threading.Thread(target=wait_for_event)
t.start()
event.set()  # Set the event to allow the thread to continue

12. 信號量()

信號量物件可讓您限制可以同時存取資源的執行緒數量。

semaphore = threading.Semaphore(2)  # Only 2 threads can access the resource at once

def access_resource():
    with semaphore:
        print("Resource accessed")

t1 = threading.Thread(target=access_resource)
t2 = threading.Thread(target=access_resource)
t3 = threading.Thread(target=access_resource)

t1.start()
t2.start()
t3.start()

13.定時器(間隔、函數)

定時器執行緒在指定的時間間隔後執行函數。

def delayed_function():
    print("Executed after delay")

timer = threading.Timer(3, delayed_function)
timer.start()  # Executes `delayed_function` after 3 seconds

14. setDaemon(真)

守護執行緒在背景執行,當主程式退出時自動退出。您可以透過呼叫 setDaemon(True) 或將 daemon=True 傳遞給 Thread 建構子來讓執行緒成為守護程式。

t = threading.Thread(target=print_numbers, daemon=True)
t.start()  # Daemon thread will exit when the main program ends

結論

threading模組是Python中處理並發的強大工具。它提供了多個類別和方法來創建和控制線程,從而可以輕鬆並行執行程式碼。從使用基本的 Thread 物件到使用 Lock 和 Semaphore 管理同步,該模組對於編寫並發 Python 程式至關重要。

版本聲明 本文轉載於:https://dev.to/usooldatascience/a-quick-guide-to-the-python-threading-module-with-examples-2b3g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼 PhpMyAdmin 在 Ubuntu 12.04 上給出「MySQLi 擴充缺失」錯誤?
    為什麼 PhpMyAdmin 在 Ubuntu 12.04 上給出「MySQLi 擴充缺失」錯誤?
    PhpMyAdmin 錯誤:MySQLi 擴充缺失在 Ubuntu 12.04 遇到 PhpMyAdmin 問題?儘管安裝了 Apache2、PHP5、MySQL 和 PhpMyAdmin,您還是遇到了「mysqli 擴充遺失」錯誤。 儘管您已取消註解 php.ini 中的「extension=my...
    程式設計 發佈於2024-11-07
  • 如何使用 java.net.URLConnection 將檔案和附加參數上傳到 HTTP 伺服器?
    如何使用 java.net.URLConnection 將檔案和附加參數上傳到 HTTP 伺服器?
    在 Java 中使用附加參數將檔案上傳到 HTTP 伺服器將檔案上傳到 HTTP 伺服器是許多應用程式的常見需求。但是,有時也需要隨文件一起傳遞附加參數。這是一個允許您在不使用外部庫的情況下發送文件和參數的解決方案:java.net.URLConnection 和Multipart/Form-Dat...
    程式設計 發佈於2024-11-07
  • 如何在 PHP 中逐行讀取和處理文字檔?
    如何在 PHP 中逐行讀取和處理文字檔?
    在 PHP 中讀取文字檔案:逐步指南許多 Web 開發場景都涉及從文字檔案讀取資料。在 PHP 中,檔案處理函數提供了逐行讀取純文字檔案的便捷方法。讓我們分解一下使用 PHP 讀取文字檔案的過程。 讀取文字檔案的程式碼:以下PHP 程式碼片段示範如何讀取文字檔案並逐行處理其內容:<?php /...
    程式設計 發佈於2024-11-07
  • 我離不開的生產力工具(獎勵)
    我離不開的生產力工具(獎勵)
    大家好,你們的孩子 Nomadev 帶著另一篇貼文回來了!今天,我很高興與大家分享一些我每天使用的超酷的人工智慧工具。這些工具已成為我日常工作的重要部分,幫助我保持井井有條、有效率並完成更多工作。 在當今快節奏的世界中,我們都希望提高生產力和效率。借助人工智慧,有大量工具可以幫助我們管理任務、簡化...
    程式設計 發佈於2024-11-07
  • 在 Go/Templ 中製作一個乾淨、友好的 Spinner
    在 Go/Templ 中製作一個乾淨、友好的 Spinner
    无用的 HTML 你们可能认为在 HTML 中制作一个一致、干净且专业的旋转框是一项简单的任务...但是,令我们失望的是,没有标准的属性来告诉输入它应该只接受整数或小数值,所有的输入过滤都必须是JS。哎呀! 我将使用 Go、a-h/Templ、Tailwind 和我心爱的 Alpi...
    程式設計 發佈於2024-11-07
  • 您可以在沒有資料庫連線的情況下轉義字串以確保資料庫安全嗎?
    您可以在沒有資料庫連線的情況下轉義字串以確保資料庫安全嗎?
    在沒有資料庫連線的情況下轉義字串以確保資料庫安全測試與資料庫互動的程式碼時,透過正確轉義使用者輸入來防止SQL注入攻擊非常重要。然而,為每個測試連接到資料庫可能效率很低。有沒有辦法在沒有活動資料庫連線的情況下轉義字串? 沒有連接轉義的限制不幸的是,在沒有資料庫連線的情況下不可能可靠地轉義字串。 my...
    程式設計 發佈於2024-11-07
  • Entropix:最大化推理效能的取樣技術
    Entropix:最大化推理效能的取樣技術
    Entropix:最大化推理效能的取樣技術 根據 Entropix README,Entropix 使用基於熵的取樣方法。本文講解了基於熵和變熵的具體採樣技術。 熵和變熵 讓我們先解釋熵和變熵,因為它們是確定採樣策略的關鍵因素。 熵 在資訊理論中...
    程式設計 發佈於2024-11-07
  • 重疊方法支援多態性
    重疊方法支援多態性
    方法涵蓋: 這不僅僅是一個命名問題,而是 Java 的一個基本特性。 它是基於動態方法調度的概念。 動態方法調度: 是在運行時而非編譯時解決對重疊方法的呼叫的機制。 允許在 Java 中實現多態性。 運作原理: 超類別引用變數可以引用子類別物件。 當透過超類別引用呼叫重寫的方法時,要執行的...
    程式設計 發佈於2024-11-07
  • 如何對 Move_uploaded_file() 函數進行故障排除?
    如何對 Move_uploaded_file() 函數進行故障排除?
    Move_uploaded_file() 函數故障排除move_uploaded_file() 函數在檔案上傳機制中扮演至關重要的角色。然而,當遇到非功能性問題時,細緻的故障排除是必不可少的。 要解決這個問題,第一步是啟動 PHP 錯誤回報。這將顯示來自 move_uploaded_file() 函...
    程式設計 發佈於2024-11-07
  • 如何解決使用 UNION 時出現的「Select 語句中的不同欄位計數」錯誤?
    如何解決使用 UNION 時出現的「Select 語句中的不同欄位計數」錯誤?
    錯誤:Select 語句中的不同列計數執行使用UNION 運算子的查詢時,必須確保涉及的所有單獨SELECT 語句都遵守兩個基本標準:匹配列數:每個SELECT 語句必須在檢索的結果集中產生相同數量的列。 資料一致型別: 不同 SELECT 語句中對應列的資料型別應對齊。 問題分析考慮提供的查詢:S...
    程式設計 發佈於2024-11-07
  • 為什麼Python專案中的相對路徑會導致檔案未找到錯誤?
    為什麼Python專案中的相對路徑會導致檔案未找到錯誤?
    在 Python 專案中使用相對路徑存取檔案在 Python 專案中操作檔案時,為了方便起見,通常會使用相對路徑。然而,它們的行為可能變得不明確,特別是在處理多層次專案結構時。 考慮以下專案佈局:project /data test.csv /package ...
    程式設計 發佈於2024-11-07
  • Spring Boot初始化後如何執行程式碼?
    Spring Boot初始化後如何執行程式碼?
    Spring Boot初始化後執行程式碼在Spring Boot應用程式中,您可能會遇到需要在應用程式初始化後執行特定功能的情況。一旦應用程式功能齊全,這對於監視任務或執行其他操作通常是必要的。本文探討了利用 ApplicationReadyEvent 事件解決此挑戰的方法。 使用 Applicat...
    程式設計 發佈於2024-11-07
  • 如何使用 JavaScript 偵測 VPN
    如何使用 JavaScript 偵測 VPN
    在我們日益互聯的世界中,VPN(虛擬私人網路)既帶來了優勢,也帶來了挑戰。雖然它們幫助用戶維護隱私和安全,但它們也可能被用於惡意目的。 我們將深入探討如何使用 JavaScript 和 fetch API 在 Web 應用程式中實作 VPN 偵測。您可以使用任何您想要的API。 ...
    程式設計 發佈於2024-11-07
  • 如何使用Apache FOP在PDF文件中正確顯示漢字?
    如何使用Apache FOP在PDF文件中正確顯示漢字?
    Apache FOP 漢字顯示問題使用Apache FOP 列印PDF 文件時,漢字可能會顯示為“####”儘管安裝了必要的語言文件。此問題是由於預設配置中缺乏字體支援所引起的。 要解決此問題,需要三個步驟:步驟1:在FO 檔案中指定字體系列使用font-family 屬性指示所需的字體。例如:&l...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3