首页 > 其他 > 详细

锁-lock

时间:2020-07-23 21:51:11      阅读:56      评论:0      收藏:0      [点我收藏+]

锁-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()

锁-lock

原文:https://www.cnblogs.com/wyh0717/p/13367240.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!