python摸爬滚打之day031----同步锁 信号量 事件 队列 生成者消费者模型 Jionablequeue

1、同步锁

  进程之间数据不共享, 但是可以共享同一套文件系统, 所以访问同一个文件, 是没有问题的. 而共享带来的是数据不安全, 进程1拿到某数据但是还未对文件进行更改, 同时进程2也拿到数据, 拿到的是为更改的数据, 造成数据错乱, 使用同步锁可以解决这一问题.

 1 import json,time
 2 from multiprocessing import Lock,Process
 3 
 4 def show_ticket():
 5     content = json.load(open("ticket","r"))             # 文件里的数据是  {"count": 2}
 6     print(f"剩余票数为{content['count']}")           
 7 
 8 
 9 def get():
10     data = json.load(open("ticket","r"))
11     time.sleep(1)
12     if data["count"] <= 0:
13         print("没有票啦")
14     else:
15         data["count"] -= 1
16         json.dump(data,open("ticket","w"))
17         time.sleep(0.2)
18         print("抢到票啦")
19 
20 
21 def act(l):
22 
23     l.acquire()        # 上锁 (因为此时这个进程和其他的进程处于同步状态, 所以这个锁也叫作同步锁)
24     show_ticket()
25     get()
26     l.release()        # 解锁
27 
28 
29 if __name__ == '__main__':
30     l = Lock()      # 实例一个同步锁
31     for i in range(10):
32         p = Process(target=act,args=(l,))
33         p.start()
同步锁

2、

3、

4、

5、

6、

7、

8、

posted @ 2018-11-29 16:04  恐水的鱼  Views(131)  Comments(0Edit  收藏  举报