1. 程式人生 > 實用技巧 >鎖-lock

鎖-lock

鎖-lock

import time
from multiprocessing import Lock,Process
def func(i,lock):
    lock.acquire()   # 拿鑰匙
    print('被鎖起來的程式碼%s'%i)
    lock.release()  # 還鑰匙
    time.sleep(1)

def func1 (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=func1,args= (i,lock))
        p.start()
import time
from multiprocessing import Lock,Process
def func(i,lock):
    lock.acquire()   # 拿鑰匙
    print('被鎖起來的程式碼%s'%i)
    lock.release()  # 還鑰匙
    time.sleep(1)

def func1 (i ,lock):
    with lock:      
# 代替acquire和release 並且在此基礎上做一些異常處理,保證即便一個程序的程式碼出錯退出了,也會歸還鑰匙
        print('被鎖起來的程式碼%s'%i)
    time.sleep(1)
if __name__ == '__main__':
    lock = Lock()
    for i in range(10):
        p = Process(target=func1,args= (i,lock))
        p.start()

搶票的例子:

import json
import time
from multiprocessing import Process,Lock

def search(i):
    with open('ticket',encoding='utf-8') as f:
        ticket = json.load(f)
    print('%s :當前的餘票是%s張'%(i,ticket['count']))

def buy_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)

def get_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()