1、锁multiprocessing-Lock

锁的应用场景:当多个进程需要操作同一个文件/数据的时候;

当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题。

为保证数据的安全性,多进程中只有去操作一些进程之间可以共享的数据资源的时候才需要进行加锁;

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

模拟查票抢票:

 

import json
import time
from multiprocessing import Process,Lock

"""
模拟查票/抢票
查票是不需要排队的,可以使用多进程,每个人都可以在同一时间查看
买票为避免多个进程操作同一个文件造成数据不安全,使用锁来避免多个进程同时修改同一个文件
"""
def search_ticket(name):
    with open('piao',encoding='utf-8') as f:
        dic = json.load(f)
        print('%s查看余票为%s张票'%(name,dic['count']))

def buy_ticket(name):
    with open('piao', encoding='utf-8') as f:
        dic = json.load(f)
    time.sleep(2)
    if dic['count'] >= 1:
        print('%s买到票了'%name)
        dic['count'] -= 1
        time.sleep(2)
        with open('piao','w',encoding='utf-8') as f:
            json.dump(dic,f)
    else:
        print('余票为0 %s没有买到票'%name)

def user(name,lock):
    search_ticket(name)
    print('%s在等待' % name)
    # lock.acquire()    # 拿钥匙取数据
    # buy_ticket(name)
    # lock.release()    # 归还钥匙
    with lock:
        print('%s开始执行了' % name)
        buy_ticket(name)

if __name__ == '__main__':
    lock = Lock()  # 创建锁
    lis = ['alex','wusir','taibai','eva_j']
    for name in lis:
        Process(target=user,args=(name,lock)).start()
模拟查票/抢票

相关文章:

  • 2022-02-09
  • 2022-12-23
  • 2021-11-14
  • 2019-03-01
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-27
  • 2021-08-30
  • 2022-12-23
  • 2021-06-26
  • 2021-11-29
相关资源
相似解决方案