码迷,mamicode.com
首页 > 编程语言 > 详细

python 以面向对象的方式创建线程 实现售票系统

时间:2015-12-23 00:38:49      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

---恢复内容开始---

通过面向对象的方法实现多线程,其核心是继承threading.Thread类。我们自己定义了一个类BoothThread, 这个类继承自thread.Threading类,通过修改Thread类的run()方法来定义线程所要执行的命令。

 1 import threading   # Python主要通过标准库中的threading包来实现多线程
 2 import time
 3 import os
 4 
 5 #作为间隔  每次调用间隔0.5s
 6 def doChore():
 7     time.sleep(0.5)
 8 
 9 # 定义一个类BoothThread继承自thread.Threading类
10 class BoothThread(threading.Thread):
11     def __init__(self, tid, monitor):
12         self.tid          = tid
13         self.monitor = monitor
14         threading.Thread.__init__(self)
15     def run(self):
16         while True:
17             monitor[lock].acquire()                          # 调用lock.acquire()   加锁
18             if monitor[tick] != 0:
19                 monitor[tick] = monitor[tick] - 1          # 售票 售出一张减少一张
20                 print(self.tid,:now left:,monitor[tick])   # 剩下的票数
21                 doChore()                                      
22             else:
23                 print("Thread_id",self.tid," No more tickets")
24                 os._exit(0)                                    # 票售完   退出程序
25             monitor[lock].release()                          # 释放锁
26             doChore()                                         
27 
28 
29 monitor = {tick:20, lock:threading.Lock()}   # 初始化票数
30 
31 # 总共设置了10个线程
32 for k in range(10):
33     new_thread = BoothThread(k, monitor)     # 创建线程; Python使用threading.Thread对象来代表线程    类BoothThread继承自thread.Threading类 
34     new_thread.start()     # 调用start()方法启动线程

 技术分享

这里使用了一个词典 monitor存放全局变量,然后把词典作为参数传递给线程函数。由于词典是可变数据对象,所以当它被传递给函数的时候,函数所使用的依然是同一个对象,相当于被多个线程所共享。

python 以面向对象的方式创建线程 实现售票系统

标签:

原文地址:http://www.cnblogs.com/FG123/p/5068556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!