zoukankan      html  css  js  c++  java
  • 锁 与抢票软件的应用

    模拟一个简单的抢票软件

    import time
    import json
    from multiprocessing import Process,Lock
    def search(person):
        with open('ticket') as f:
            dic = json.load(f)
        time.sleep(0.2)
        print('%s查票余额:'%person,dic['count'])
    def get_ticket(person):
        with open('ticket') as f:
            dic = json.load(f)
        time.sleep(0.2)
        if dic['count'] >0:
            print('%s买到票了'%person)
            dic['count'] -=1
            time.sleep(0.2)
            with open('ticket','w') as f:
                json.dump(dic,f)
        else:
            print('%s没买到票'%person)
    def ticket(person,lock):
        search(person)
        lock.acquire()            # 加锁
        get_ticket(person)
        lock.release()        #解锁
    if __name__ == '__main__':
        lock = Lock()
        for i in range(1,10):
            p = Process(target=ticket,args=('person%s'%i,lock))
            p.start()
    1、为了保证数据的安全
    2、在异步的情况下,多个进程有可能同时修改同一份资源
    3、就给这个修改的过程加锁


    本质:降低了程序的效率,让原本能够执行的代码变成顺序执行,异步变同步的过程。
    import time
    from multiprocessing import Process,Lock
    def func(num,lock):
        time.sleep(1)
        print('***异步执行',num)
        lock.acquire()
        time.sleep(0.5)
        print('同步执行',num)
        lock.release()
    if __name__ == '__main__':
        lock = Lock()
        for i in range(10):
            p = Process(target=func,args=(i,lock))
            p.start()


  • 相关阅读:
    纯js实现字符串formate方法
    C#实现json压缩和格式化
    简单的前端校验框架实现
    快速拷贝文件
    0012 移除元素
    0011 删除链表的倒数第N个节点
    0010 最长公共前缀
    0009 合并两个有序链表
    0008 合并K个排序链表
    0007 回文数
  • 原文地址:https://www.cnblogs.com/youhongliang/p/9677507.html
Copyright © 2011-2022 走看看