python 多线程笔记(4)-- 车站售票模拟
2016-02-02 22:49
686 查看
import threading import time import random class Worker(threading.Thread): '''售票员''' def __init__(self, wait_num=5, index=0): super().__init__() self.wait_num = wait_num # 当前排队人数 self.setName('窗口' + str(index)) # 窗口号 def run(self): global counter, mutex while counter and self.wait_num: # 若有余票且有人排队 # ============================ # 窗口问询 # ============================ time.sleep(random.randrange(2,10)) # 比较耗时,时间随机 # ============================ # 出票 # ============================ mutex.acquire() # 锁住① if counter == 0: # 如果票数为0 mutex.release() # 解锁③ -----> 这句很重要!!! print(self.getName(), ':抱歉,票已售完') break counter = counter - 1 # 票数减一 print('{}:当前余票 {} 张'.format(self.getName(), counter)) mutex.release() # 解锁③ # ============================ # 排队人数变化 # ============================ self.wait_num -= 1 # 排队人数减一 self.wait_num += random.randrange(0,2) # 排队人数随机增加 if __name__ == '__main__': # 剩余车票数 counter = 20 # 创建锁 mutex = threading.Lock() # 开4个售票窗口 workers = [] for i in range(4): wait_num = random.randrange(2,10) # 窗口前排队人数随机 workers.append(Worker(wait_num, i+1)) # 开始售票 for w in workers: w.start() # 阻塞主程/后台静默?自己选 #for w in workers: # w.join()
相关文章推荐
- Python正则表达式
- [leetcode]@python 81. Search in Rotated Sorted Array II
- 记录遇到的Python陷阱和注意点
- 《笨办法学Python》 第31课手记
- 2.2读写视频
- Python 第十二章 virtualenv
- Python实现kNN(k邻近算法)
- python小白-day4递归和算法基础
- Python 安装包,简易方法
- python教程1安装环境
- python程序编译成exe文件
- Python 利用PIL将图片转为字符
- NumPy快速入门
- python 多线程笔记(3)-- 线程的私有命名空间
- Python快速入门
- python list和dict的遍历
- python环境搭建
- Python+OpenCV实现图像高斯模糊
- Beginning Python Chapter 1 Notes
- 一入python深似海--浅拷贝与深拷贝