小白学python------------并发编程之互斥锁

一.互斥锁

互斥锁:可以将部分(只涉及修改共享数据的代码)变成串行

与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('主')

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/82423654
今日推荐