python多執行緒鎖 python的多執行緒程式設計之鎖

2021-10-11 09:31:44 字數 2422 閱讀 1657

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...