python多線程能提高效率嗎?

虹一法師


完全可以,但看你處理的是什麼任務,雖然Python有GIL全局解釋器鎖,但如果處理的是IO密集、網絡請求密集的任務,那麼多線程能夠大大提高效率。

多線程(Threading)允許您將應用程序分解為多個子任務,並同時運行這些任務。如果正確使用多線程,則可以提高應用程序的速度,性能和呈現能力。

Python多線程示例

下面有個簡單的例子,可以給我們簡單介紹多線程的用途。

保存文件,然後按F5鍵運行該程序。如果一切都正確完成,這是您應該看到的輸出:

  1. 這些語句導入時間和線程模塊,這些模塊用於處理Python線程的執行和延遲。
  2. 在這裡,您定義了一個名為thread_test的函數該函數將由start_new_thread方法調用。該函數運行while循環進行四次迭代,並打印調用它的線程的名稱。一旦迭代完成,它將打印一條消息,指出線程已完成執行。
  3. 這是程序的主要部分。在這裡,您只需使用thread_test函數作為參數來調用start_new_thread方法。<strong>

    這將為您作為參數傳遞的函數創建一個新線程並開始執行它。請注意,您可以將其(線程_測試)替換為要作為線程運行的任何其他函數。

線程模塊

該模塊是python中線程的高級實現,也是用於管理多線程應用程序的事實上的標準。與線程模塊相比,它提供了廣泛的功能。

  1. 這部分與我們前面的示例相同。在這裡,您將導入時間和線程模塊,該模塊用於處理Python線程的執行和延遲。
  2. 在這一部分中,您將創建一個名為threadtester的類,該類繼承或擴展了線程模塊的Thread類。這是在python中創建線程的最常見方法之一。但是,您只應在應用程序中覆蓋構造函數和run()方法。如您在上面的代碼示例中看到的那樣,__init__方法(構造函數)已被覆蓋。

    同樣,您也重寫了run()方法。它包含您要在線程內執行的代碼。在此示例中,您已調用thread_test()函數。

  3. 這是thread_test()方法,該方法將i的值作為參數,在每次迭代時將其減少1, 並循環遍歷其餘代碼,直到i變為0。在每次迭代中,它都會打印當前正在執行的線程的名稱。並等待數秒(也被視為參數)。
  4. thread1 = threadtester(),在這裡,我們正在創建一個線程,並傳遞在__init__中聲明的三個參數。第一個參數是線程的ID,第二個參數是線程的名稱,第三個參數是計數器,它確定while循環應運行多少次。
  5. thread2.start(),

    start方法用於啟動線程的執行。在內部,start()函數調用您的類的run()方法。
  6. thread3.join()

    ,join()方法阻止其他代碼的執行,並等待直到調用它的線程完成。

通過以上例子我們可以知道,併發可以對兩種類型的問題產生很大的影響。這些通常稱為CPU綁定和IO綁定。受IO約束的問題會導致程序運行緩慢,因為它經常必須等待某些外部資源的輸入/輸出。

當您的程序使用比CPU慢得多的東西時,它們經常出現。比CPU慢的例子很多,但是值得慶幸的是您的程序並未與其中的大多數交互。您的程序最常與之交互的緩慢事物是文件系統和網絡連接,這種情況就非常適合用python多線程能去提高效率。


分享到:


相關文章: