1. <source id="nejs2"></source>
  2. <video id="nejs2"></video>
    <source id="nejs2"></source>
          1. 首頁 > Python 教程 > Python 提高教程 > Python 中的threading模塊

            Python 中的threading模塊

            更新:

            正如我們在之前的教程中所看到的,threading模塊用于在 python 中創建、控制和管理線程。在本教程中,我們將討論由threading模塊定義的各種函數和對象類型。


            threading模塊功能

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

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

            穿線。active_count()功能

            該函數返回當前活動的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 個線程,并且在主線程中正在進行完整的執行。


            穿線。current_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("Current thread is: " + threading.current_thread())
                t1.join()
                t2.join()

            當前線程為:


            穿線。get_ident()

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

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

            threading.get_ident()

            140578859194112


            穿線。enumerate()

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

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

             threading.enumerate() 

            [ 、、 ]


            穿線。main_thread()

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

             threading.main_thread() 

            穿線。settrace(fun)

            該方法用于為使用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方法的語句之上。


            穿線。setprofile(fun)

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

             threading.setprofile(hello) 

            穿線。stack_size([size])

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

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

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

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


            穿線。TIMEOUT_MAX

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


            threading模塊對象

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

            以下是一些對象類型:

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

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



            頂部 久久久久99精品成人片毛片_黃色A片三級三級三級无码_日本不卡高清视频v中文字幕_高清欧美视频一区二区
            1. <source id="nejs2"></source>
            2. <video id="nejs2"></video>
              <source id="nejs2"></source>