一.互斥锁
互斥锁:可以将部分(只涉及修改共享数据的代码)变成串行
与join的区别:join是要执行任务的所有代码整体串行
from multiprocessing import Process,Lock
import time
import json
import os
def check():#查看票数大家可以一起查看
time.sleep(1)
with open('db.json', 'r', encoding='utf-8') as f:
dic = json.load(f)
print('%s 查看了剩余票数[%s]' % (os.getpid(), dic['count']))
def get():#购买票数大家必须一个购买完了再下一个购买
with open('db.json', 'r', encoding='utf-8') as f:
dic = json.load(f)
time.sleep(2)
if dic['count'] > 0:
dic['count'] -= 1
with open('db.json', 'w', encoding='utf-8') as f:
json.dump(dic, f)
print('%s 购票成功' % os.getpid())
else:
print('%s 没有余票'%os.getpid())
def task(mutex):
check()
# mutex.acquire()#互斥锁不能连续的acquire,必须是release以后才能重新acquire
# get()
# mutex.release() #释放锁
with mutex: # 文件的上下文管理,简写版
get()
if __name__ == '__main__':
mutex = Lock() #互斥锁对象
for i in range(10):
p = Process(target=task,args=(mutex,))
p.start()
p.join()
print('主')