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