# 锁:
# 每次程序只能让一个子进程进入(拿钥匙开锁,并再将门关上),其它进程没有钥匙就无法进去
# 当程序执行完毕时将钥匙放回,然后下一个子进程继续执行(下一个子进程拿钥匙进去)
# 以此类推,也就是一次只能进入一个子进程
import json
import time
from multiprocessing import Process
from multiprocessing import Lock
# def show(i):
# with open('ticket','r') as f:
# a = json.load(f)
# print('%s号用户查看剩余票数: %s张'%(i,a['ticket']))
def buy_ticket(i,lock):
lock.acquire() # 拿到锁的钥匙进入程序
with open('ticket','r') as f:
dic = json.load(f)
time.sleep(0.1)
if dic['ticket'] > 0:
dic['ticket'] -= 1
print('\033[32m%s号拿到票了\033[0m'%(i))
else:
print('\033[31m%s号未拿到票\033[0m'%(i))
time.sleep(0.1)
with open('ticket','w') as f:
json.dump(dic,f)
lock.release() # 还钥匙
if __name__ == '__main__':
# for i in range(10):
# p = Process(target=show,args=(i,))
# p.start()
lock = Lock() # 创建 锁 对象
for i in range(10):
p = Process(target=buy_ticket,args=(i,lock))
p.start()