博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 多线程笔记(4)-- 车站售票模拟
阅读量:6433 次
发布时间:2019-06-23

本文共 1686 字,大约阅读时间需要 5 分钟。

 

import threadingimport timeimport randomclass 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()

 

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/5178683.html
,如需转载请自行联系原作者
你可能感兴趣的文章
python 问题集合
查看>>
豌豆荚工程师谈其新版应用搜索技术
查看>>
螺旋阵(递归和非递归)
查看>>
我的爷爷(知识渊博的下乡知青)
查看>>
jQuery动画连续触发、滞后反复执行解决办法
查看>>
uva 10405 Longest Common Subsequence
查看>>
HttpFileCollection类
查看>>
Eclipse使用常见设置
查看>>
控制台下的字符图像界面
查看>>
c++ 数组形参
查看>>
Memcache的安全
查看>>
KVM/Xen and libvirt: currentMemory, memory and ballooning
查看>>
metasploit 笔记
查看>>
hdu 2845(最大不连续子序列)
查看>>
J2me的异常处理和多线程
查看>>
选择、生成-EA与数据库的交互-by小雨
查看>>
客户网页WIZnet无线解决方案 之 太阳能逆变器
查看>>
CCRepeatForever和CCDelayTime
查看>>
android jni aotf 错误
查看>>
Azkaban的功能特点(二)
查看>>