码迷,mamicode.com
首页 > 编程语言 > 详细

python 锁

时间:2019-06-19 00:37:37      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:coding   get   import   proc   ase   进程   enc   ==   odi   

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

"""
过程:
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()
    lock.acquire
    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购买失败
"""

 

python 锁

标签:coding   get   import   proc   ase   进程   enc   ==   odi   

原文地址:https://www.cnblogs.com/wt7018/p/11048674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!