Python 多線程,threading模塊,創(chuàng)建子線程的兩種方式示例
本文實例講述了Python 多線程,threading模塊,創(chuàng)建子線程的兩種方式。分享給大家供大家參考,具體如下:
GIL(全局解釋器鎖)是C語言版本的Python解釋器中專有的,GIL的存在讓多線程的效率變低(哪個線程搶到鎖,就執(zhí)行哪個線程)。在IO密集型程序中,多線程依然比單線程效率高(GIL通過IO阻塞自動切換多線程)。
解決GIL(全局解釋器鎖)的問題的三種方法:
1、不要用C語言版本的Python解釋器。
2、讓子線程運行其他語言代碼(例如:主線程運行Python代碼,子線程運行C語言代碼(C語言的動態(tài)庫))。
3、多進程代替多線程(多進程可以利用多核CPU)。
創(chuàng)建子線程的第一種方式:
demo.py(通過函數(shù)名指定子線程的任務):
import threading def test1(): print("子線程運行了...") def main(): # 通過 target=函數(shù)名 的方式定義子線程 t1 = threading.Thread(target=test1) # 通過target指定子線程要執(zhí)行的任務。可以通過args=元組 來指定test1的參數(shù)。 t1.start() # 只有在調(diào)用start方法后才會創(chuàng)建子線程并執(zhí)行 # threading.enumerate() 打印正在執(zhí)行的線程,包括主線程和子線程 print(threading.enumerate()) # [<_MainThread(MainThread, started 139724821161728)>, <Thread(Thread-1, started 139724795434752)>] # 當子線程沒有結(jié)束時,主線程也不會結(jié)束。 當主線程結(jié)束后,所有的子線程也會結(jié)束。 if __name__ == "__main__": main()
運行結(jié)果:
子線程運行了...
[<_MainThread(MainThread, started 7076)>, <Thread(Thread-1, started 2832)>]
創(chuàng)建子線程的第二種方式:
demo.py(通過類來定義子線程):
#coding=utf-8 import threading # 通過類定義子線程。 繼承threading.Thread類 class MyThread(threading.Thread): # 開啟子線程時,會自動執(zhí)行run函數(shù) def run(self): print(self.name) # Thread-1 name屬性中保存的是當前線程的名字 def main(): t = MyThread() # 實例化自定義的子線程 t.start() # 開啟子線程 if __name__ == '__main__': main()
運行結(jié)果:
Thread-1
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python進程與線程操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》、《Python+MySQL數(shù)據(jù)庫程序設計入門教程》及《Python常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
- 在Python中通過threading模塊定義和調(diào)用線程的方法
- Python+threading模塊對單個接口進行并發(fā)測試
- python threading和multiprocessing模塊基本用法實例分析
- Python多線程模塊Threading用法示例小結(jié)
- Python線程threading模塊用法詳解
- Python threading模塊condition原理及運行流程詳解
- Python 多線程之threading 模塊的使用
- Python多線程編程之threading模塊詳解
- python threading模塊的使用指南
- Python常用模塊之threading和Thread模塊及線程通信
相關(guān)文章
解決PyCharm 中寫 Turtle代碼沒提示以及標黃的問題
這篇文章主要介紹了解決PyCharm 中寫 Turtle代碼沒提示以及標黃的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Python高階函數(shù)之filter()函數(shù)代碼示例
這篇文章主要介紹了Python高階函數(shù)之filter()函數(shù)代碼示例,獲取了一個序列的時候,想要把一些內(nèi)容去掉,保留一部分內(nèi)容的時候可以使用高效的filter()函數(shù),需要的朋友可以參考下2023-07-07python類參數(shù)定義及數(shù)據(jù)擴展方式unsqueeze/expand
本文主要介紹了python類參數(shù)定義及數(shù)據(jù)擴展方式unsqueeze/expand,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08pytorch中Transformer進行中英文翻譯訓練的實現(xiàn)
本文主要介紹了pytorch中Transformer進行中英文翻譯訓練的實現(xiàn),詳細闡述了使用PyTorch實現(xiàn)Transformer模型的代碼實現(xiàn)和訓練過程,具有一定參考價值,感興趣的可以了解一下2023-08-08教你怎么用PyCharm為同一服務器配置多個python解釋器
當我們在服務器上創(chuàng)建了多個虛擬環(huán)境時,也可以在 PyCharm 中配置這些虛擬環(huán)境,方便不同的項目使用不同的環(huán)境,然而按照網(wǎng)上教程添加多個python解釋器后,PyCharm會自動幫我們創(chuàng)建多個重復的服務器,本文主要給出該問題的解決方法,同時也對添加解釋器做一個詳細的講解2021-05-05使用python實現(xiàn)兩數(shù)之和的畫解算法
這篇文章主要介紹了使用python實現(xiàn)兩數(shù)之和的畫解算法,采用實例問題的描述來進行問題分析,并給出用暴力求解和哈希表兩種方法解決方案,有需要的朋友可以參考下2021-08-08