Python并发编程
2018-02-06 15:04
330 查看
环境:Windows+CPython3.6
理论名词
...
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> 购票失败,很遗憾已经没有余票 解释:互斥锁将并发变成串行,保障了数据安全。 '''模拟抢票,将购票动作由并发变成串行,不影响并发查询
相关文章推荐
- python基础——并发编程
- 理解python并发编程-进程篇
- 使用Python中的greenlet包实现并发编程的入门教程
- Python并发编程-Redis
- python并发编程之多进程2-------------数据共享及进程池和回调函数
- Python中的并发编程实例
- Python 并发编程之使用多线程和多处理器
- python之高性能网络编程并发框架eventlet实例
- python_day10_并发编程
- python并发编程之IO模型
- python_fullstack基础(十八)-并发编程-进程
- Python并发编程之进程
- python并发编程之多进程1-----------互斥锁与进程间的通信
- Python并发编程协程(Coroutine)之Gevent
- Python3并发编程之同步
- Python学习-并发编程之线程池
- Python并发编程
- Python3 与 C# 并发编程之~ 进程篇
- python并发编程之多进程、多线程、异步和协程
- Python高并发的网络编程库:eventlet