一:執行緒
執行緒(有時候稱為輕量級程序),執行緒包括開始、執行順序和結束三部分。它有乙個指令指標,用於記錄當前執行的上下文。當其他執行緒執行時,它可以被搶占(中斷)和臨時掛起(也稱為睡眠)--這種做法叫做讓步
乙個程序中的各個執行緒與主線程共享同一片資料空間,因此相比與獨立的程序而言,執行緒間的資訊共享和通訊更加容易。執行緒一般是以併發方式執行的,正是由於這種並行和資料共享機制,使得多工間的協作成為可能。當然,在單核cpu系統中,因為真正的併發是不可能的,所以執行緒的執行實際上是這樣規劃的:每個執行緒執行一小會兒,然後讓步給其他執行緒(再次排隊等待更多的cpu時間)。在整個程序的執行的過程中,每個執行緒執行他自己特定任務,在必要時和其他執行緒進行結果通訊。
當然,這種共享並不是沒有風險的。如果兩個或多個執行緒訪問同一片資料,由於資料訪問順序不同,可能導致結果不一致,這種情況通常稱為競態條件。
另外,執行緒無法給予公平的執行時間。
儘管python直譯器中可以執行多個執行緒,但是在任意給定時刻只有乙個執行緒會被直譯器執行
二:使用執行緒的第一種方式:
1import
time
2from threading import
thread34
deftest():
5print('
-----多執行緒-------')
6 time.sleep(1)
7for i in range(5):
8 t = thread(target=test) #建立乙個執行緒,引數是要執行的函式
9 t.start() #啟動執行緒
t.join()# 保證等待子執行緒執行完再執行後續的主線程
三:使用執行緒的第二種方式:
1#使用多執行緒的第二種方式(建立乙個類繼承thread類,重寫run()方法)
2import
threading
3import
time
4class
mythread(threading.thread):
5def
run(self):
6for i in range(5):
7print('
-----使用多執行緒的第二種方式------')
8 time.sleep(1)9if
__name__ == '
__main__':
10 m =mythread()
11 m.start()
四:加互斥鎖解決多執行緒之間共享資料被修改出現的異常資料
說明:當多個執行緒幾乎同時訪問乙個共享資料時,需要進行同步控制
執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制就是引入互斥鎖。
互斥鎖為資源引入乙個狀態:鎖定/非鎖定
某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為」鎖定「,其他執行緒不能更改;直到改執行緒釋放資源,將資源狀態變成」非鎖定「,其他執行緒才能再次鎖定改資源,互斥鎖保證了每次只有執行緒進行寫入操作,從而保證了多執行緒情況下資料的準確性。
示例**:
1from threading import
thread,lock
2 num =0
3def
test1(lock):
4global
num5 lock.acquire() #上鎖6
for i in range(1000000):
7 num += 1
8 lock.release() #
釋放鎖(解鎖)
9print('
----test1---%d
'%num)
10def
test2(lock):
11global
num12
lock.acquire()
13for i in range(1000000):
14 num += 1
15lock.release()
16print('
-----test2-----%d
'%num)
17def
main():
18 lock =lock()#
初始化乙個互斥鎖物件
19 t1 = thread(target=test1,args=(lock,)) #
建立乙個多執行緒
20t1.start()
21t1.join()
22 t2 = thread(target=test2,args=(lock,))
23t2.start()
24 t2.join()#
等待子執行緒執行完成後再繼續主線程
25print
(num)
2627
if__name__ == '
__main__':
28 main()
執行結果:
----test1---1000000-----test2-----2000000
2000000
Python之多執行緒
1 呼叫thread模組中的start new thread 函式來產生新執行緒 thread.start new thread function,args kwargs function 執行緒函式。args 傳遞給執行緒函式的引數,他必須是個tuple型別。kwargs 可選引數。2 使用thr...
python之多執行緒
學習了一下多執行緒 用到爬蟲裡面簡直爽歪歪呀 定義就很簡單,為了實現高併發,能夠同時在乙個指令碼下執行多個程式,節約時間 新增執行緒用到的 import threading as td def sum num1,num2 sum num1 num2 print sss sum def divided...
python之多執行緒
我們在商超買東西時,當只有乙個收銀台時,會導致排很長的隊。如果有多個收銀台同時工作的話,會大大提高效率。這是生活中的多執行緒,即多個執行緒同時工作。我們接下來用 案例講解多執行緒與單執行緒的區別。單執行緒即在程式執行過程中,按照一定的先後順序執行。多執行緒即多個事件同時發生。單執行緒 import ...