zoukankan      html  css  js  c++  java
  • 进程互斥锁

    进程互斥锁

    进程同步(multiprocess.Lock) 锁——multiprocess.Lock
    	进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的。
    	而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理。
    
    # 多进程模拟抢票实例
    # 文件db内容为: {"count":1}
    # 注意一定要用双引号,不然json无法识别
    from multiprocessing import Process,Lock
    import time,json,random
    
    def search():
        dic = json.load(open('db'))
        print('剩余票数: %s'%dic['count'])
    
    def get():
        dic = json.load(open('db'))
        time.sleep(1)
        if dic['count'] > 0:
            dic['count'] -= 1
            time.sleep(2)
            json.dump(dic, open('db', 'w'))
            print('购票成功')
    
    def task():
        search()
        get()
    
    if __name__ == '__main__':
        for i in range(10):  # 模拟10个客户端抢票
            p = Process(target=task)
            p.start()
    # 引发问题:数据写入错乱。
    
    # 互斥锁保证数据安全
    from multiprocessing import Process,Lock
    import time,json,random,time
    
    def search():
        dic = json.load(open('db'))
        print('剩余票数:%s'%dic['count'])
    
    def get():
        dic = json.load(open('db'))
        # 模拟读数据的网络延迟
        time.sleep(random.random())
        if dic['count'] > 0:
            dic['count'] -= 1
            # 模拟写数据的网络延迟
            time.sleep(random.random())
            json.dump(dic, open('db', 'w'))
            print('购票成功')
        else:
            print('购票失败')
    
    def task(lock):
        search()
        lock.acquire()
        get()
        lock.release()
    
    if __name__ == '__main__':
        lock = Lock()
        for i in range(10):
            p = Process(target=task, args=(lock,))
            p.start()
    

    总结:

    ​ 加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行修改,即串行的修改,没错,速度是慢了,但牺牲了速度却保证了数据安全。

    千里之行,始于足下。
  • 相关阅读:
    数据库查询服务框架
    postgresql清理工具
    postgre索引
    SAP模块一句话入门(专业术语的理解)
    SAP订单结算详解
    SAP Datasheet
    ASP.NET MVC5 网站开发实践
    VMware S/4 HANA OP 1511虚拟机下载,64G内存限制解决方案
    SAP标准教材列表
    SAP文章链接
  • 原文地址:https://www.cnblogs.com/jincoco/p/12935925.html
Copyright © 2011-2022 走看看