python 进程锁

本文通过使用Python的multiprocessing库中的Lock对象,详细解释了如何在多进程中同步访问和修改共享资源,如文件或数据库,以防止数据冲突和不一致。通过具体的电影票购买场景,展示了Lock在确保数据一致性方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用:异步修改数据时,会造成数据安全问题,子进程分别进入文件/数据库,修改数据

"""
过程:
1.导入Lock模块
2.创建Lock对象
3.Lock对象做为要锁的进程的参数
4.lock.acquire()
5.lock.release()
"""
from multiprocessing import Process
from multiprocessing import Lock


def for_fun(lock):
    lock.acquire()
    pass
    lock.release()


if __name__ == '__main__':
    lock = Lock()
    p = Process(target=for_fun(), args=(lock, ))

 

# 查看、购买电影票
# 购买要设置锁,涉及到数据的修改
import time
import json
from multiprocessing import Process
from multiprocessing import Lock


def read(name):
    with open(file='ticket', mode='r', encoding='utf-8') as f:
        ret = json.load(f)['ticket']
        print('%s查询,还剩%s张票' % (name, ret))


def buy(name, lock):
    lock.acquire()      # 拿钥匙
    with open(file='ticket', mode='r', encoding='utf-8') as f:
        ret = json.load(f)
        time.sleep(0.1)
    if ret['ticket'] > 0:
        ret['ticket'] -= 1

        print('%s购买成功' % name)
    else:
        print('%s购买失败' % name)
    time.sleep(0.1)
    with open(file='ticket', mode='w', encoding='utf-8') as f:
        json.dump(ret, f)
        time.sleep(0.1)
    lock.release()      # 还钥匙


if __name__ == '__main__':
    lock = Lock()
   
    for i in range(1, 3):
        p = Process(target=read, args=('tom%s' % i, ))
        p.start()
        p = Process(target=buy, args=('tom%s' % i, lock))
        p.start()
"""
结果:
tom1查询,还剩1张票
tom2查询,还剩1张票
tom2购买成功
tom1购买失败
"""

 

转载于:https://www.cnblogs.com/wt7018/p/11048674.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值