程序鎖(互斥鎖)(Python)

2022-04-10 20:58:02 字數 1701 閱讀 4605

3:#

搶票示例

import

json

import

time

from multiprocessing import

process,lock

defsearch(i):

with open(

'ticket

',encoding='

utf-8

') as f:

ticket =json.load(f)

print('

%s :當前的餘票是%s張

'%(i,ticket['

count

']))

defbuy_ticket(i):

with open(

'ticket

',encoding='

utf-8

') as f:

ticket =json.load(f)

if ticket['

count

']>0:

ticket[

'count

'] -= 1

print('

%s買到票了

'%i)

time.sleep(0.1)

with open(

'ticket

', mode='

w',encoding='

utf-8

') as f:

json.dump(ticket,f)

defget_ticket(i,lock):

search(i)

with lock:

#代替acquire和release 並且在此基礎上做一些異常處理,保證即便乙個程序的**出錯退出了,也會歸還鑰匙

buy_ticket(i)

if__name__ == '

__main__':

lock = lock() #

互斥鎖for i in range(10):

process(target=get_ticket,args=(i,lock)).start()

1:#lock解析

#import time

#from multiprocessing import lock,process

#def func(i,lock):

#lock.acquire() # 拿鑰匙

#print('被鎖起來的**%s'%i)

#lock.release() # 還鑰匙

#time.sleep(1)##

if __name__ == '__main__':

#lock = lock()

#for i in range(10):

#p = process(target=func,args=(i,lock))

#p.start()

2:#from multiprocessing import lock # 互斥鎖 不能再同乙個程序中連續acquire多次

#lock = lock()

#lock.acquire()

#print(1)

#lock.release()

#lock.acquire()

#print(2)

#lock.release()

存票檔案:

互斥鎖 程序池

互斥鎖 當多個執行緒幾乎同時修改某乙個共享的資料時,需要進行同步操作,引入互斥鎖 當乙個執行緒更改資料的時候,先將它鎖定,其他執行緒不能修改,直到執行緒操作全部完成,此時會釋放資源 互斥鎖保證了同一時刻,只有乙個執行緒能對資源進行操作,保證資料的正確性 from threading import t...

多程序中的程序鎖(互斥鎖)

以下例項中 import threading lock threading.lock num 0def work1 asd global num for i in range asd num 1print 在當前的執行緒修改過後的num是 num defwork2 asd global num fo...

Python程序相關(二)互斥鎖 程序佇列

互斥鎖 對於模擬多人查票搶票 票數放在檔案中db.txt 程式 from multiprocessing import process import json import time import random import os def search time.sleep random.randi...