您的位置:首页 > 编程语言 > Python开发

Python并发编程

2018-02-06 15:04 330 查看

环境:Windows+CPython3.6

理论名词

操作系统

多道程序设计技术

并发

阻塞

IO

...

import json
import time
import random
from multiprocessing import Process, Lock

def search(n):
dic = json.load(open('db.txt'))
time.sleep(1)
print('<%s> 查到剩余票数 [%s]' % (n, dic['count']))

def get(n):
dic = json.load(open('db.txt'))  # db.txt的初始数据:{"count": 0}
if dic['count'] > 0:
dic['count'] -= 1
time.sleep(1)  # 模拟网络延迟
json.dump(dic, open('db.txt', 'w'))
print('<%s> 购票成功,恭喜' % n)
else:
print('<%s> 购票失败,很遗憾已经没有余票' % n)

def task(n, lock):
search(n)
# lock.acquire()
# get(n)
# lock.release()
with lock:
get(n)

if __name__ == '__main__':
lock = Lock()
for i in range(5):
p = Process(target=task, args=(i, lock))
p.start()
# p.join()
'''
打印结果:

<0> 查到剩余票数 [1]
<1> 查到剩余票数 [1]
<2> 查到剩余票数 [1]
<3> 查到剩余票数 [1]
<4> 查到剩余票数 [1]
<0> 购票成功,恭喜
<1> 购票失败,很遗憾已经没有余票
<2> 购票失败,很遗憾已经没有余票
<3> 购票失败,很遗憾已经没有余票
<4> 购票失败,很遗憾已经没有余票

解释:互斥锁将并发变成串行,保障了数据安全。
'''
模拟抢票,将购票动作由并发变成串行,不影响并发查询  

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: