Python 中的threading模塊

該模塊提供以下管理線程的功能:

這是上一個教程的代碼片段,我們將使用它來查看threading模塊提供的各種功能。

該函數返回當前活動的Thread對象的數量。

import time
import threading

def thread1(i):
    time.sleep(3)
    #print('No. printed by Thread 1: %d' %i)

def thread2(i):
    time.sleep(3)
    #print('No. printed by Thread 2: %d' %i)

if __name__ == '__main__':
    t1 = threading.Thread(target=thread1, args=(10,))
    t2 = threading.Thread(target=thread2, args=(12,))
    t1.start()
    t2.start()
    print("No. of active threads: " + threading.active_count())
    t1.join()
    t2.join()

活動線程數:3

嘗試在上面的終端中運行該代碼。您將看到線程數為 3 ,因為我們已經創建了 2 個線程,並且在主線程中正在進行完整的執行。

該函數將返回當前線程對象,對應調用者的控制線程(當前在調用者的控制中)。如果調用者的控制線程不是通過線程模塊(例如主線程)創建的,則返回一個功能有限的偽線程對象。

import time
import threading

def thread1(i):
    time.sleep(3)
    #print('No. printed by Thread 1: %d' %i)

def thread2(i):
    time.sleep(3)
    #print('No. printed by Thread 2: %d' %i)

if __name__ == '__main__':
    t1 = threading.Thread(target=thread1, args=(10,))
    t2 = threading.Thread(target=thread2, args=(12,))
    t1.start()
    t2.start()
    print("Current thread is: " + threading.current_thread())
    t1.join()
    t2.join()

當前線程為:

該函數返回當前線程的線程標識符。這是一個非零整數值。如果我們啟動了線程,那麼這個方法將返回它的標識符,否則,它將返回無。

我們可以使用這個方法來索引線程特定數據的字典。當一個線程退出(停止)並創建另一個線程時,可以回收線程標識符。

threading.get_ident()

140578859194112

該方法返回當前活動的所有Thread對象的列表。該列表包括後台線程(當程序退出時,與之相關的所有後台線程都將自動終止)當前線程創建的虛擬線程對象,以及主線程。

此列表中不存在已終止的線程和尚未啟動的線程。

 threading.enumerate() 

[ 、、 ]

此方法返回主 Thread對象。在正常情況下,主線程是啟動 python 解釋器的線程。

 threading.main_thread() 

該方法用於為使用threading模塊啟動的所有線程設置跟蹤函數/鉤子。對於每個線程,跟蹤函數被傳遞給sys.settrace()方法,該方法在調用run()方法之前被附加到線程。

我們希望作為跟蹤函數的回調函數將接收三個參數:frame(來自正在運行的代碼的堆棧幀)event(一個命名通知類型的字元串)和arg(一個特定於事件的值)

def hello(frame, event, arg):
    print("Hello, I am a trace hook.")
threading.settrace(hello) 

嘗試更新頂部終端中的代碼。將hello函數放在主方法和語句threading.settrace(hello)之外,就在我們為線程調用start方法的語句之上。

此方法用於為從threading模塊啟動的所有線程設置配置文件函數。和 trace 函數一樣,profile 函數也傳遞給每個線程的sys.setprofile()方法,在調用run()方法之前附加到線程。

 threading.setprofile(hello) 

此方法返回創建新線程時使用的線程堆棧大小。size參數是可選的,可用於設置創建後續線程所用的堆棧大小,必須為 0 或正整數(D =默認值為 0)。

如果不支持更改線程堆棧大小,則會引發運行時錯誤。

如果指定的堆棧大小無效,將引發值錯誤。

目前 32 KiB 是支持的最小堆棧大小,為解釋器提供足夠的堆棧空間。

除了上述指定的功能外,threading模塊還定義了一個常數。如果您指定的超時值大於TIMEOUT_MAX常量的值,您將得到一個OverflowError

除了上面指定的功能之外,threading模塊還提供了許多類,這些類的對象在創建和管理線程時非常有用。

以下是一些對象類型:

| 目標 | 描述 |
| 線 | 對象,表示單個執行線程。 |
| 鎖 | 原始鎖對象。 |
| 斷續器 | RLock 或可重入鎖對象為單線程提供了獲取(重)已持有鎖(遞歸鎖)的能力。 |
| 情況 | 條件變數對象使一個線程等待,直到另一個線程滿足某個「條件」(如狀態變化或某些數據值) |
| 事件 | 這是條件變數的一個更通用的版本,可以讓許多線程等待某個事件的發生,所有等待的線程只有在事件發生時才會被喚醒。 |
| 旗語 | 當線程塊之間共享的有限資源不可用時,提供一個「計數器」。 |
| 有界符號 | 類似於信號量,但確保它永遠不會超過初始值。 |
| 計時器 | 類似於線程,除了它在運行之前等待一段指定的時間。 |
| 屏障 | 創建一個「屏障」,指定數量的線程必須全部到達該屏障,然後才能繼續運行。 |

上表簡要介紹了 python threading模塊中的各種對象類型。我們將在接下來的幾個教程中詳細討論所有這些對象。



原創文章,作者:NC7MF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126699.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NC7MF的頭像NC7MF
上一篇 2024-10-03 23:09
下一篇 2024-10-03 23:09

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論