目錄
多執行緒類似於同時執行多個不同程式,多程式設計客棧執行緒執行有如下優點:
使用執行緒可以把佔據長時間的程式中的任務放到後台去處理。
使用者介面可以更加吸引人,比如使用者點選了乙個按鈕去觸發某些事件的處理,可以彈出乙個進度條來顯示處理的進度。
程式的執行速度可能加快。
在一些等待的任務實現上如使用者輸入、檔案讀寫和網路收發資料等,執行緒就比較有gycelrrdzn用了。在這種情況下我們可以釋放一些珍貴的資源如記憶體占用等等。
乙個程序裡面必然有乙個主線程。
建立執行緒的兩種方法
繼承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('以類的方式建立多執行緒',self.n)
time.sleep(3)
r1 = mythread(1)
r2 = mythread(2)
r1.start()
r2.start()
呼叫threading庫的thread類
import threading
import time
def test(x):
gycelrrdznprint(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()
守護執行緒此類執行緒的特點是,當程式中主線程及所有非守護執行緒執行結束時,未執行完畢的守護執行緒也會隨之消亡(進行死亡狀態),程式將結束執行。
#守護執行緒
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=0res=
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(tim程式設計客棧e.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迴圈列印4次
print(self.name)
time.sleep(2)#列印一次delay兩秒
if __name__ == '__main__':
#建立執行緒1和執行緒2並傳入引數
x1 = mythread1()
x2 = mythread2("張三")
#開啟執行緒
x1.start()
x2.start()
本文標題: python的多執行緒原來可以這樣解
本文位址:
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
黑馬程式設計師 原來這題可以這樣寫
windows phone 7手機開發 net培訓 期待與您交流!streamreader sr new streamreader d data.txt system.text.asciiencoding.default string line string.empty int max 0 int ...
python多執行緒 Python多執行緒的一些知識
了更好地體驗多執行緒爬蟲,本章先介紹下需要了解的知識點,以便後續的多執行緒爬蟲文章有更好的理解與學習。在接下來要講的知識點中,感興趣的讀者們請先弄清楚程序和執行緒兩者是什麼?它們各自有著什麼樣的關係呢?讀下廖雪峰老師簡單介紹的例子,比喻非常生動清晰,故這裡不多做講解。程序和執行緒 www.liaox...