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、多進(jìn)程代替多線程(多進(jìn)程可以利用多核CPU)。
創(chuàng)建子線程的第一種方式:
demo.py(通過函數(shù)名指定子線程的任務(wù)):
import threading
def test1():
print("子線程運行了...")
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()
運行結(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屬性中保存的是當(dāng)前線程的名字
def main():
t = MyThread() # 實例化自定義的子線程
t.start() # 開啟子線程
if __name__ == '__main__':
main()
運行結(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模塊基本用法實例分析
- Python多線程模塊Threading用法示例小結(jié)
- Python線程threading模塊用法詳解
- Python threading模塊condition原理及運行流程詳解
- Python 多線程之threading 模塊的使用
- Python多線程編程之threading模塊詳解
- python threading模塊的使用指南
- Python常用模塊之threading和Thread模塊及線程通信
相關(guān)文章
Python定時發(fā)送消息的腳本:每天跟你女朋友說晚安
今天小編就為大家分享一篇關(guān)于Python定時發(fā)送消息的腳本:每天跟你女朋友說晚安的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10
解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題
下面小編就為大家分享一篇解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
python logging.basicConfig不生效的原因及解決
今天小編就為大家分享一篇python logging.basicConfig不生效的原因及解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python學(xué)習(xí)之Anaconda的使用與配置方法
我在學(xué)習(xí)Python的爬蟲框架中看到看到了anaconda的介紹,簡直是相見恨晚啊,我覺的每個Python的學(xué)習(xí)網(wǎng)站上首先都應(yīng)該使用anaconda來進(jìn)行教程,因為在實踐的過程中光環(huán)境的各種報錯就能消磨掉你所有的學(xué)習(xí)興趣2018-01-01
基于python實現(xiàn)分析識別文章/內(nèi)容中的高頻詞和關(guān)鍵詞
要分析一篇文章的高頻詞和關(guān)鍵詞,可以使用 Python 中的 nltk 庫和 collections 庫或者jieba庫來實現(xiàn),本篇文章介紹基于兩種庫分別實現(xiàn)分析內(nèi)容中的高頻詞和關(guān)鍵詞,需要的朋友可以參考下2023-09-09
python安裝完成后可以進(jìn)行的后續(xù)步驟和注意事項小結(jié)
本文詳細(xì)介紹了安裝Python3后的后續(xù)步驟,包括驗證安裝、配置環(huán)境、安裝包、創(chuàng)建和運行腳本,以及使用虛擬環(huán)境,還強調(diào)了注意事項,如系統(tǒng)更新、包管理與安全,感興趣的朋友一起看看吧2025-01-01

