python 以面向对象的方式创建线程 实现售票系统
2015-12-23 12:28
871 查看
---恢复内容开始---
转载或借鉴请注明转自/article/5235033.html 谢谢!
通过面向对象的方法实现多线程,其核心是继承threading.Thread类。我们自己定义了一个类BoothThread, 这个类继承自thread.Threading类,通过修改Thread类的[b]run()方法来定义线程所要执行的命令。[/b]
这里使用了一个词典 monitor存放全局变量,然后把词典作为参数传递给线程函数。由于词典是可变数据对象,所以当它被传递给函数的时候,函数所使用的依然是同一个对象,相当于被多个线程所共享。
转载或借鉴请注明转自/article/5235033.html 谢谢!
通过面向对象的方法实现多线程,其核心是继承threading.Thread类。我们自己定义了一个类BoothThread, 这个类继承自thread.Threading类,通过修改Thread类的[b]run()方法来定义线程所要执行的命令。[/b]
import threading # Python主要通过标准库中的threading包来实现多线程 import time import os #作为间隔 每次调用间隔0.5s def doChore(): time.sleep(0.5) # 定义一个类BoothThread继承自thread.Threading类 class BoothThread(threading.Thread): def __init__(self, tid, monitor): self.tid = tid self.monitor = monitor threading.Thread.__init__(self) def run(self): while True: monitor['lock'].acquire() # 调用lock.acquire() 加锁 if monitor['tick'] != 0: monitor['tick'] = monitor['tick'] - 1 # 售票 售出一张减少一张 print(self.tid,':now left:',monitor['tick']) # 剩下的票数 doChore() else: print("Thread_id",self.tid," No more tickets") os._exit(0) # 票售完 退出程序 monitor['lock'].release() # 释放锁 doChore() monitor = {'tick':20, 'lock':threading.Lock()} # 初始化票数 # 总共设置了10个线程 for k in range(10): new_thread = BoothThread(k, monitor) # 创建线程; Python使用threading.Thread对象来代表线程 类BoothThread继承自thread.Threading类 new_thread.start() # 调用start()方法启动线程
这里使用了一个词典 monitor存放全局变量,然后把词典作为参数传递给线程函数。由于词典是可变数据对象,所以当它被传递给函数的时候,函数所使用的依然是同一个对象,相当于被多个线程所共享。
相关文章推荐
- Python爬虫-scrapy框架简单应用
- python脚本处理文本时遇到的字符问题:UnicodeDecodeError: " " codec can't decode byte
- python splinter
- Python序列的方法(转)
- python之单例设计模式
- Python 中string和unicode的区别
- Spark处理Json格式数据(Python)
- python 深copy和浅copy
- Python 的Logging模块
- python之反射
- python文件操作
- 异步SocketServer服务器
- python获取window下网卡流量的函数
- 转载——最近百度云盘不提供搜索,闲来无事,玩玩python爬虫,爬一下百度云盘的资源
- Python操作符重载总结&列表模型
- Python中机器学习库scikit-learn的安装
- windows使用python调用wget批处理下载数据
- Python资源
- Python第三方库的安装方法
- Python游戏开发