當前位置:編程學習大全網 - 源碼下載 - 線程池源代碼解讀

線程池源代碼解讀

目錄

眾所周知,CPU是計算機的核心,它承擔著所有的計算任務。操作系統是電腦的管理者,是大管家。它負責調度任務,分配和管理資源,指揮整個計算機硬件。應用程序是具有某種功能的程序,它運行在操作系統之上。

在很早的時候,計算機還沒有線程的概念,但是隨著時代的發展,只用進程來處理程序有很多缺點。比如當壹個進程被阻塞時,整個程序會停在阻塞的地方,如果進程切換頻繁,會浪費系統資源。於是線程出現了。

線程是能夠擁有資源並獨立運行的最小單位,也是程序執行的最小單位。壹個進程可以有多個線程,屬於同壹個進程的多個線程將* * *共享資源。

Python電子書(以及經典書籍)應該在200本以上。

② Python標準庫資料(最全中文版)

③項目源代碼(四五十個有趣可靠的訓練項目和源代碼)

④關於Python基礎、爬蟲、網絡開發、大數據分析的視頻(適合小白學習)

⑤ Python學習路線圖(告別差學)

您可以通過01信任我個人獲得大量Python學習資源。

進程是壹個程序在數據集上具有壹定功能的動態執行過程。過程由程序、數據集和過程控制塊組成。程序用於描述進程要完成的功能,是控制進程執行的指令集。數據集是程序執行時需要的數據和工作空間;程序控制塊(PCB)包含程序的描述信息和控制信息,是進程存在的唯壹標誌。

在Python中,thread由封裝了thread的兩個標準庫Thread和Threading支持。線程模塊中提供了線程、鎖、r鎖、條件和其他組件。

在Python中,線程和進程是通過thread類使用的。這個類在我們的線程和線程模塊中。我們通常通過線程導入。

默認情況下,只要解釋器中沒有錯誤,線程就是可用的。

監護人模式:

現在在我們的程序代碼中,有多個線程,它們都會對同壹部分內容進行操作,那麽如何實現這些數據的* * *享受呢?

這時可以使用線程庫中的Lock對象鎖來保護它。

鎖對象的獲取方法是申請鎖。

每個線程在用* * * *操作數據對象之前都要申請操作權限,即調用用* * * *操作數據對象對應的鎖對象的acquire方法。如果線程A執行了acquire()方法,其他線程B已經申請了鎖,還沒有釋放,那麽線程A的代碼會在這裏等待線程B釋放鎖,不執行下面的代碼。

在線程B通過執行鎖的release方法釋放鎖之前,線程A可以獲取鎖並執行下面的代碼。

比如:

使用多線程時,如果數據沒有達到妳的預期,可以考慮* * *享受的數據是否被調用覆蓋。

使用線程庫中的鎖對象鎖來保護它。

Python中的多重處理是通過多重處理包實現的,類似於threading.Thread,可以使用多重處理。過程對象來創建過程對象。這個Process對象的方法和Thread對象的方法幾乎壹樣,比如start()、run()、join()等。壹個方法不同於thread對象中的daemon方法,通過設置daemon屬性來完成process對象的守護。

監護人模式:

它的用法類似於線程鎖。

管理器的作用是提供多個進程共享的全局變量。Manager()方法會返回壹個控制壹個服務進程的對象,這個進程中保存的對象運行其他進程來代理操作。

語法:

線程池的基類是concurrent.futures模塊中的執行器,執行器提供了兩個子類,ThreadPoolExecutor和ProcessPoolExecutor。其中ThreadPoolExecutor用於創建線程池,ProcessPoolExecutor用於創建進程池。

如果用線程池/進程池來管理並發編程,那麽只要把相應的任務函數提交給線程池/進程池,剩下的就由線程池/進程池來處理。

Exectuor提供了以下常用方法:

程序向線程池提交任務函數後,submit方法會返回壹個Future對象,Future類主要用於獲取線程任務函數的返回值。因為線程任務會在新線程中異步執行,線程執行的函數相當於壹個“未來完成”的任務,所以Python用未來來表示。

未來提供了以下方法:

使用線程池執行線程任務的步驟如下:

最佳線程數=((線程等待時間+線程CPU時間)/線程CPU時間)* CPU數。

也可以低於CPU核心數。

使用線程池執行線程任務的步驟如下:

進程的啟動代碼必須放在if _ _ name _ =' _ _ main _ _ ':代碼下,而不是放在函數中或其他地方。

啟動流程的技能

打開進程的數量最好低於CPU核心的最大數量。

  • 上一篇:手機刷入已經被root的系統微信會被盜嗎?
  • 下一篇:復制加微信源代碼
  • copyright 2024編程學習大全網