python互斥锁原理_python之互斥锁

from multiprocessing import Process,Lock

import json

import os

import time

import random

mutex=Lock()

def check():

with open('db.json','rt',encoding='utf-8') as f:

dic=json.load(f)

print('%s 剩余票数:%s' %(os.getpid(),dic['count']))

def get():

with open('db.json','rt',encoding='utf-8') as f:

dic=json.load(f)

time.sleep(1)

if dic['count'] > 0:

dic['count']-=1

time.sleep(random.randint(1,3)) #模拟网络延迟

with open('db.json','wt',encoding='utf-8') as f:

json.dump(dic,f)

print('%s 抢票成功' %os.getpid())

def task(mutex):

# 并发查看

check()

# 串行购票

mutex.acquire()

get()

mutex.release()

if __name__ == '__main__':

for i in range(10):

p=Process(target=task,args=(mutex,))

p.start()

# p.join() # 将p内的代码变成整体串行

执行结果如下:

2464 剩余票数:1

2256 剩余票数:1

5832 剩余票数:1

6008 剩余票数:1

2788 剩余票数:1

4292 剩余票数:1

5252 剩余票数:1

2448 剩余票数:1

5880 剩余票数:1

5940 剩余票数:1

2464 抢票成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值