系统相关
首页 > 系统相关> > 进程同步锁

进程同步锁

作者:互联网

from multiprocessing import Process
import json,time
#在当前目录下创建一个文件(db)
#文件db的内容:{"count":1}表示的是余票数量

def search():   #查询余票
    fp = open('db','r')
    dic = json.load(fp)   #反序列化,将文件中的json数据转换成python字典
    print('剩余车票数为:{}'.format(dic['count']))

def get():    #抢票,每次只能购买一张
    fp = open('db', 'r')
    dic = json.load(fp)
    time.sleep(0.1)
    if dic['count'] > 0:
        time.sleep(0.2)
        dic['count'] -= 1
        time.sleep(0.1)
        json.dump(dic, open('db', 'w'))    #购票后,回写到文件中
        print('购票成功')

def task():
    search()  #先查询
    get()    #后购买

if __name__ == "__main__":
    for i in range(3):
        p = Process(target=task)
        p.start()

#运行结果
#剩余车票数为:1
#剩余车票数为:1
#剩余车票数为:1
#购票成功
#购票成功
#购票成功
from multiprocessing import Process
import json,time
from multiprocessing import Lock
#在当前目录下创建一个文件(db)
#文件db的内容:{"count":1}表示的是余票数量

def search():   #查询余票
    fp = open('db','r')
    dic = json.load(fp)   #反序列化,将文件中的json数据转换成python字典
    print('剩余车票数为:{}'.format(dic['count']))

def get():    #抢票,每次只能购买一张
    fp = open('db', 'r')
    dic = json.load(fp)
    time.sleep(0.1)
    if dic['count'] > 0:
        time.sleep(0.2)
        dic['count'] -= 1
        time.sleep(0.1)
        json.dump(dic, open('db', 'w'))    #购票后,回写到文件中
        print('购票成功')

def task(lock):
    lock.acquire()   #加锁
    search()  #先查询
    get()    #后购买
    lock.release()    #解锁

if __name__ == "__main__":
    lock = Lock()   #创建一把进程锁
    for i in range(3):
        p = Process(target=task,args=(lock,))
        p.start()

#运行结果
#剩余车票数为:1
#购票成功
#剩余车票数为:0
#剩余车票数为:0

注意点:加锁会失去异步效果

标签:__,加锁,进程同步,数为,db,dic,json
来源: https://www.cnblogs.com/xwltest/p/16219917.html