知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
Python高級——多任務(wù)編程之線程
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):48
文章目錄
- 線程概念
- 1. 線程的介紹
- 2. 線程的概念
- 3. 線程的作用
- 多線程的使用
- 1. 導(dǎo)入線程模塊
- 2. 線程類Thread參數(shù)說明
- 3. 啟動線程
- 4. 多線程完成多任務(wù)的代碼
- 線程執(zhí)行帶有參數(shù)的任務(wù)
- 1. 線程執(zhí)行帶有參數(shù)的任務(wù)的介紹
- 2. args參數(shù)的使用
- 3. kwargs參數(shù)的使用
- 線程注意事項
線程概念
1. 線程的介紹
在Python中,想要實現(xiàn)多任務(wù)除了使用進程,還可以使用線程來完成,線程是實現(xiàn)多任務(wù)的另外一種方式。
2. 線程的概念
線程是進程中執(zhí)行代碼的一個分支,每個執(zhí)行分支(線程)要想工作執(zhí)行代碼需要cpu進行調(diào)度 ,也就是說線程是cpu調(diào)度的基本單位,每個進程至少都有一個線程,而這個線程就是我們通常說的主線程。
3. 線程的作用
多線程可以完成多任務(wù)
多線程效果圖:
多線程的使用
1. 導(dǎo)入線程模塊
#導(dǎo)入線程模塊
import threading
2. 線程類Thread參數(shù)說明
Thread([group [, target [, name [, args [, kwargs]]]]])
- group: 線程組,目前只能使用None
- target: 執(zhí)行的目標(biāo)任務(wù)名
- args: 以元組的方式給執(zhí)行任務(wù)傳參
- kwargs: 以字典方式給執(zhí)行任務(wù)傳參
- name: 線程名,一般不用設(shè)置
3. 啟動線程
啟動線程使用start方法
4. 多線程完成多任務(wù)的代碼
import threading
import time
# 唱歌任務(wù)
def sing():
# 擴展: 獲取當(dāng)前線程
# print("sing當(dāng)前執(zhí)行的線程為:", threading.current_thread())
for i in range(3):
print("正在唱歌...%d" % i)
time.sleep(1)
# 跳舞任務(wù)
def dance():
# 擴展: 獲取當(dāng)前線程
# print("dance當(dāng)前執(zhí)行的線程為:", threading.current_thread())
for i in range(3):
print("正在跳舞...%d" % i)
time.sleep(1)
if __name__ == '__main__':
# 擴展: 獲取當(dāng)前線程
# print("當(dāng)前執(zhí)行的線程為:", threading.current_thread())
# 創(chuàng)建唱歌的線程
# target: 線程執(zhí)行的函數(shù)名
sing_thread = threading.Thread(target=sing)
# 創(chuàng)建跳舞的線程
dance_thread = threading.Thread(target=dance)
# 開啟線程
sing_thread.start()
dance_thread.start()
執(zhí)行結(jié)果:
正在唱歌...0
正在跳舞...0
正在唱歌...1
正在跳舞...1
正在唱歌...2
正在跳舞...2
線程執(zhí)行帶有參數(shù)的任務(wù)
1. 線程執(zhí)行帶有參數(shù)的任務(wù)的介紹
前面我們使用線程執(zhí)行的任務(wù)是沒有參數(shù)的,假如我們使用線程執(zhí)行的任務(wù)帶有參數(shù),如何給函數(shù)傳參呢?
Thread類執(zhí)行任務(wù)并給任務(wù)傳參數(shù)有兩種方式:
args 表示以元組的方式給執(zhí)行任務(wù)傳參
kwargs 表示以字典方式給執(zhí)行任務(wù)傳參
2. args參數(shù)的使用
示例代碼:
import threading
import time
# 帶有參數(shù)的任務(wù)
def task(count):
for i in range(count):
print("任務(wù)執(zhí)行中..")
time.sleep(0.2)
else:
print("任務(wù)執(zhí)行完成")
if __name__ == '__main__':
# 創(chuàng)建子線程
# args: 以元組的方式給任務(wù)傳入?yún)?shù)
sub_thread = threading.Thread(target=task, args=(5,))
sub_thread.start()
執(zhí)行結(jié)果:
任務(wù)執(zhí)行中…
任務(wù)執(zhí)行中…
任務(wù)執(zhí)行中…
任務(wù)執(zhí)行中…
任務(wù)執(zhí)行中…
任務(wù)執(zhí)行完成
3. kwargs參數(shù)的使用
示例代碼:
import threading
import time
# 帶有參數(shù)的任務(wù)
def task(count):
for i in range(count):
print("任務(wù)執(zhí)行中..")
time.sleep(0.2)
else:
print("任務(wù)執(zhí)行完成")
if __name__ == '__main__':
# 創(chuàng)建子線程
# kwargs: 表示以字典方式傳入?yún)?shù)
sub_thread = threading.Thread(target=task, kwargs={"count": 3})
sub_thread.start()
執(zhí)行結(jié)果:
任務(wù)執(zhí)行中..
任務(wù)執(zhí)行中..
任務(wù)執(zhí)行中..
任務(wù)執(zhí)行完成
線程注意事項
- 線程之間執(zhí)行是無序的
- 主線程會等待所有的子線程執(zhí)行結(jié)束再結(jié)束
- 線程之間共享全局變量
- 線程之間共享全局變量數(shù)據(jù)出現(xiàn)錯誤問題
相關(guān)案例查看更多
相關(guān)閱讀
- 公眾號模板消息
- 報廢車管理
- 昆明軟件定制
- 軟件定制
- 云南網(wǎng)站建設(shè)公司哪家好
- 搜索引擎優(yōu)化
- 云南網(wǎng)站維護
- 小程序生成海報
- 云南網(wǎng)站建設(shè)價格
- 百度小程序公司
- 云南網(wǎng)站建設(shè)公司
- 云南軟件設(shè)計
- 網(wǎng)站建設(shè)選
- 江蘇小程序開發(fā)
- 麗江小程序開發(fā)
- 海報插件
- 網(wǎng)站建設(shè)首選
- 云南省建設(shè)廳網(wǎng)站官網(wǎng)
- 云南小程序代建
- 云南微信小程序開發(fā)
- 云南建站公司
- 云南網(wǎng)站建設(shè)首選
- 云南小程序被騙
- 網(wǎng)站建設(shè)開發(fā)
- 報廢車拆解管理系統(tǒng)
- 汽車報廢管理系統(tǒng)
- 網(wǎng)站建設(shè)需要多少錢
- 網(wǎng)站建設(shè)案例
- 網(wǎng)絡(luò)公司
- 商標(biāo)注冊