python的多線程原來可以這樣解
更新時間:2022年01月09日 17:06:58 作者:lijin111222
這篇文章主要為大家介紹了python的多線程,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
多線程
多線程類似于同時執(zhí)行多個不同程序,多線程運行有如下優(yōu)點:
使用線程可以把占據長時間的程序中的任務放到后臺去處理。
用戶界面可以更加吸引人,比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進度條來顯示處理的進度。
程序的運行速度可能加快。
在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發(fā)數據等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等。
創(chuàng)建線程
一個進程里面必然有一個主線程。
創(chuàng)建線程的兩種方法
繼承Thread類,并重寫它的run()方法
import threading
import time
cLass MyThread(threading.Thread):
def__ init__ (seLf, n):
super (MyThread, seLf).__ init__()
self.n = n
def run(self):
print('以類的方式創(chuàng)建多線程',self.n)
time.sleep(3)
r1 = MyThread(1)
r2 = MyThread(2)
r1.start()
r2.start()
調用threading庫的Thread類
import threading
import time
def test(x):
print(x)
time.sleep(2)
if __name__=='__main__':
t1 = threading.Thread(target=test, args=(1,))
t2 = threading.Thread(target=test, args=(2,))
t1.start()
t2.start()
守護線程此類線程的特點是,當程序中主線程及所有非守護線程執(zhí)行結束時,未執(zhí)行完畢的守護線程也會隨之消亡(進行死亡狀態(tài)),程序將結束運行。
#守護線程
import threading
import time
def run(n):
print('task',n)
time.sleep(1)
print('3s')
time.sleep(1)
print('2s')
time.sleep(1)
print('1s')
if __name__ == '__main__': #主線程
t=threading.Thread(target=run,args=('t1',))
t.setDaemon(True) #設置子線程為守護線程,守護主線程。主線程結束,子線程也立馬結束。必須在start() 方法調用之前設置
t.start()
print('end')
線程鎖
1.互斥鎖
#互斥鎖
import threading
def run():
global x
lock.acquire() #申請鎖
x+=1
lock.release() #釋放鎖
if __name__=='__main__':
x=0
res=[]
lock=threading.Lock() #實例化線程鎖
for i in range(100): #100個線程
t=threading.Thread(target=run)
t.start()
res.append(t)
for t in res:
t.join()
print(x)
2.遞歸鎖
import threading
def func(lock):
global gl_num
lock.acquire()
gl_num += 1
time.sleep(1)
print(gl_num)
lock.release()
if __name__ == '__main__':
gl_num = 0
lock = threading.RLock()
for i in range(10):
t = threading.Thread(target=func,args=(lock,))
t.start()
練手:
import threading
import time #導入時間模塊
#線程一:輸出當前的年月日時分秒
class myThread1(threading.Thread):
def run(self):
while (True):
print(time.asctime(time.localtime(time.time())))#輸出實時時間
time.sleep(1)
#線程二:name每2秒打印輸出4次結束
class myThread2(threading.Thread):#繼承threading.Thread
def __init__(self,name):#繼承父類的方法實現繼承threading.Thread
super(myThread2, self).__init__()#super方法調用父類
self.name=name #實例化對象屬性
def run(self):#重寫Thread類中的run方法
for i in range(4):#for循環(huán)打印4次
print(self.name)
time.sleep(2)#打印一次delay兩秒
if __name__ == '__main__':
#創(chuàng)建線程1和線程2并傳入參數
x1 = myThread1()
x2 = myThread2("張三")
#開啟線程
x1.start()
x2.start()
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
Python利用matplotlib做圖中圖及次坐標軸的實例
今天小編就為大家分享一篇Python利用matplotlib做圖中圖及次坐標軸的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07

