python0016多執行緒
1.多執行緒簡介
現代的高階程式語言中,幾乎所有語言都支援多執行緒。多執行緒很實用,即便是在單核處理器上多執行緒仍然是實用的。
使用多執行緒過程中問題也很多,多個執行緒間是共享資料的,這時候會出現執行緒安全問題。假設a,b執行緒共同使用變數sum。a中執行的是sum=0 sum=1+2 print sum,b中執行sum=1 sum=3+4 print sum。由於a,b兩個執行緒共同執行,那麼這六條語句有多種執行順序,下面列舉兩種:
(1)正常
a: sum=0(2)異常a: sum=1+2
a: print sum #輸出3
b: sum=1
b: sum=3+4
b: print sum #輸出7
出現這種問題後,就要用到執行緒鎖,執行緒同步機制等。當同時使用多個執行緒鎖時還可能出現死鎖。b: sum=1
b: sum=3+4
a: sum=0
a: sum=1+2
b: print sum #輸出3
a: print sum #輸出3
2.python中的多執行緒
在python中有兩種建立執行緒的方式:
(1)寫乙個要再子執行緒中執行的函式,傳給thread類
import threading
import time
#把函式傳給thread
def print_number(number):
#下面一行是為了讓結果看起來更自然,讓執行緒休眠100ms,可以去掉
time.sleep(0.1)
print("thread_id:",threading.current_thread().ident," num:",number)
threads=
#下面建立了10個執行緒
for i in range(10):
#target 要執行的函式 args 要執行函式的引數 注意:(i,)最後乙個引數一定要這樣寫,否則會有問題,具體原因還沒有**
t=threading.thread(target=print_number,args=(i,))
#啟動執行緒
for t in threads:
t.start()
# 某次執行結果:
# thread_id: 123145321340928 num: 0
# thread_id: 123145331851264 num: 2
# thread_id: 123145326596096 num: 1
# thread_id: 123145337106432 num: 3
# thread_id: 123145342361600 num: 4
# thread_id: 123145368637440 num: 9
# thread_id: 123145358127104 num: 7
# thread_id: 123145347616768 num: 5
# thread_id: 123145363382272 num: 8
# thread_id: 123145352871936 num: 6
(2)繼承thread類,重寫run方法
import threading
import time
#繼承thread物件,重寫run方法
class printnumthread(threading.thread):
def __init__(self,number):
super(printnumthread,self).__init__()
self.number=number
def run(self):
#下面一行是為了讓結果看起來更自然,讓執行緒休眠100ms,可以去掉
time.sleep(0.1)
print("thread_id:",threading.current_thread().ident," num:",self.number)
threads=
#下面建立了10個執行緒
for i in range(10):
#啟動這10個執行緒
for t in threads:
t.start()
# 某次執行結果:
# thread_id: 123145426317312 num: 0
# thread_id: 123145431572480 num: 1
# thread_id: 123145436827648 num: 2
# thread_id: 123145447337984 num: 4
# thread_id: 123145452593152 num: 5
# thread_id: 123145463103488 num: 7
# thread_id: 123145442082816 num: 3
# thread_id: 123145457848320 num: 6
# thread_id: 123145468358656 num: 8
# thread_id: 123145473613824 num: 9
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒詳解 Python多執行緒詳解
前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...
python程式多執行緒 PYTHON多執行緒
在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...