1、 背景概述
在python中,要保證資料的正確性,並且自己對資料進行控制,對資料進行加鎖並且自己釋放鎖。
多執行緒的主要目的為了提高效能與速度,用在無關的方向是最好的,例如在使用爬蟲的時候,可以使用多執行緒來進行爬取資料,因為在這些執行緒之間沒有需要共同操作的資料,從而在這個時候利用是最好的。
如果需要操作同乙份資料,那麼必須自己保證資料的安全性。
如果需要利用多cpu的特性,那麼應該使用的是多程序程式設計,而不是多執行緒程式設計,多程序程式設計為multiprocessing。
2、 利用鎖進行同步相同的資料
直接看以下的**:
#!/usr/bin/env python
import time
import threading
num = 0
class mythread(threading.thread):
def run(self):
#lock.acquire()
#time.sleep(1)
global num
num += 1
print self.name + 'set num to '+str(num)
#lock.release()
#lock = threading.rlock()
threads =
for i in range(10000):
t = mythread()
for i in range(10000):
threads[i].start()
for i in range(10000):
threads[i].join()看以上的**,對全域性變數進行乙個修改,從而每個執行緒取到的是同乙份的資料,從而,可能造成資料的計算結果不正確,從而需要用鎖進行控制資料的正確性。
ps:在我的機器上進行執行的時候,都是正確的,從而看起來好像不用鎖也可以,但是在有的機器上進行模擬的時候,最後的計算結果不正確。
在使用鎖的時候,只要將注釋的**進行去掉即可使用鎖。
3、 鎖的型別
在python的threading模組中,提供了三種鎖,如下所示:
在進行鎖的操作的時候,必須在每個執行緒中,自己獲取鎖,然後自己釋放鎖,否則會造成一直在等待,也可以稱之為死鎖。
4、 事件
在進行多執行緒的時候,可以判斷乙個事件發生,然後觸發做另外的事情,從而可以使用event,如下**所示:
[root@python 523]# cat thread_demo.py
#!/usr/bin/env python
import threading
import time
import queue
def producter(name,queue,lock):
event.clear()
print '%s start to product...' % name
queue.put('something')
time.sleep(3)
print 'product something'
event.set()
event.wait()
def consumer(name,queue,lock):
print '%s start to consume...' % name
event.wait()
queue.get()
print 'consume something'
event.set()
lock = threading.lock()
queue = queue.queue(10)
event = threading.event()
threads =
threadsc =
for i in range(1):
t = threading.thread(target=producter,args=('kel%s' % i,queue,lock))
for i in range(1):
threads[i].start()
for i in range(1):
t = threading.thread(target=consumer,args=('smile%s' % i,queue,lock))
for i in range(1):
threadsc[i].start()
在使用event的時候,clear表示將flag設定為false,set表示設定為true,wait表示在false的時候,一直等待,從而當producter沒有資料的時候,consumer一直在等待。
這種可以做事件的觸發。
問題:在進行此實驗的時候,如果執行緒出現錯誤,那麼是無法關閉的,從而只有殺掉程序才可以,從而可以使用命令如下:
killall python
殺掉程序的同時殺掉執行緒。(可以殺死程序,但是執行緒是無法殺掉的)
python 多執行緒 鎖
參考 python cookbook 12章 啟動和停止執行緒 start 啟動執行緒 is alive 判斷是否已經結束 join 請求連線某個執行緒,等待該執行緒結束,才退出join函式 daemon引數,守護執行緒,該執行緒無法被連線,主線程結束後自動銷毀。2.7不適用 終止執行緒 需要自己構...
python執行緒互斥鎖 Python多執行緒與互斥鎖
多執行緒 threading python的thread模組是 較底層的模組,python的threading 模組是對thread做了 些包裝的,可以更加 便的被使 1.使 threading模組 from threading import thread 匯入模組 t thread target ...
python多執行緒鎖機制
在多執行緒程式設計中常用到的乙個概念就是鎖,它用於將執行緒需要獨佔的資源進行加鎖,使用後再進行釋放,防止死鎖發生。此處給出乙個不加鎖的多執行緒例子 實現整數n在每個執行緒內加1並列印 usr bin python coding utf 8 import threading import time c...