python鎖機制 python 鎖機制

2021-10-11 04:46:18 字數 2461 閱讀 6162

當有兩個或跟多個執行緒或程序需要操作乙個變數或程序時,會出現意想不到的結果,這是因為執行緒或程序時迸發進行的,對同意變數或檔案操作時,會出現同時對其操作,從到導致邏輯錯誤。#!/bin/usr/env python

#coding:utf-8

import multiprocessing

import time

class multf(multiprocessing.process):

"""docstring for multf"""

def __init__(self,filename,proname,stime):

multiprocessing.process.__init__(self)

self.filename = filename

self.proname  = proname

self.stime    = stime

def run(self):

with open(self.filename,'a') as f:

for x in xrange(1,5):

f.write("程序編號:"+str(self.proname)+"---"+str(x)+'\n')

time.sleep(self.stime)

f.close()

print u"檔案寫入完成."

def main():

filename = './test.txt'

t1 = multf(filename,'01',2)

t2 = multf(filename,'02',1)

t3 = multf(filename,'03',2)

t1.start()

t2.start()

t3.start()

t1.join()

t2.join()

t3.join()

print u"結束"

if __name__ == '__main__':

main()

為解決以上問題我們需要引入鎖。

鎖有兩種狀態:被鎖(locked)和沒有被鎖(unlocked)。擁有acquire()和release()兩種方法,並且遵循以下的規則:如果乙個鎖的狀態是unlocked,呼叫acquire()方法改變它的狀態為locked;

如果乙個鎖的狀態是locked,acquire()將會阻塞,直到另乙個執行緒或程序呼叫release()方法釋放它;

如果乙個鎖的狀態是unlocked,呼叫release()會丟擲runtimeerror異常;

如果乙個鎖的狀態是locked,呼叫release()方法改變它的狀態wieunlocked。

解決上面兩個程序或執行緒同時寫乙個檔案的問題的方法就是:我們給寫檔案的類的構造器中傳入乙個鎖(lock),使用這個鎖來保護檔案操作,實現在給定的時間只有乙個執行緒寫檔案。#!/bin/usr/env python

#coding:utf-8

import multiprocessing

import time

class multf(multiprocessing.process):

"""docstring for multf"""

def __init__(self,filename,proname,stime,lock):

multiprocessing.process.__init__(self)

self.filename = filename

self.proname  = proname

self.stime    = stime

self.lock       = lock

def run(self):

with open(self.filename,'a') as f:

self.lock.acquire()

for x in xrange(1,5):

f.write("程序編號:"+str(self.proname)+"---"+str(x)+'\n')

time.sleep(self.stime)

f.close()

self.lock.release()

print u"檔案寫入完成."

def main():

filename = './test2.txt'

lock = multiprocessing.lock()

t1 = multf(filename,'01',2, lock)

t2 = multf(filename,'02',1,lock)

t3 = multf(filename,'03',2,lock)

t1.start()

t2.start()

t3.start()

t1.join()

t2.join()

t3.join()

print u"結束"

if __name__ == '__main__':

main()

python鎖機制 python的鎖機制

鎖 lock lock 指令鎖 是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態 鎖定和非鎖定,以及兩個基本的方法。可以認為lock有乙個鎖定池,當執行緒請求鎖定時,將執行緒至於池中,直到獲得鎖定後出池。池中的執行緒處於狀態圖中的同步阻塞狀態。構造方法 l...

python鎖機制 Python高階之多執行緒鎖機制

1.多程序的優勢 為了同步完成多項任務,通過提高資源使用效率來提高系統的效率。2.檢視執行緒數 threading.enumerate 函式便可以看到當前執行緒的數量。3.檢視當前執行緒的名字 threading.current thread 可以看到當前執行緒的資訊。4.類可以繼承 threadi...

python多執行緒鎖機制

在多執行緒程式設計中常用到的乙個概念就是鎖,它用於將執行緒需要獨佔的資源進行加鎖,使用後再進行釋放,防止死鎖發生。此處給出乙個不加鎖的多執行緒例子 實現整數n在每個執行緒內加1並列印 usr bin python coding utf 8 import threading import time c...