Python多线程实战:函数与类的使用
需积分: 11 129 浏览量
更新于2024-09-18
收藏 13KB TXT 举报
"本文主要介绍了Python中的多线程编程,包括两种实现方式:函数包装和类包装线程对象。通过示例代码展示了如何使用这两种方法创建和管理线程,以及线程的一些基本操作,如线程启动、退出等。"
在Python中,多线程是一种并行处理任务的方法,它允许程序同时执行多个任务,提高效率。Python中有两种主要的使用线程的方式:
1. 函数包装线程对象:
在Python标准库的`thread`模块中,可以使用`start_new_thread()`函数来创建新的线程。这是一个简单的例子:
```python
import time
import thread
def timer(no, interval):
cnt = 0
while cnt < 10:
print('Thread: (%d) Time: %s\n' % (no, time.ctime()))
time.sleep(interval)
cnt += 1
thread.exit_thread()
def test():
# 使用thread.start_new_thread() 创建两个新线程
thread.start_new_thread(timer, (1, 1))
thread.start_new_thread(timer, (2, 2))
if __name__ == '__main__':
test()
```
在这个例子中,`timer`函数是执行的任务,`start_new_thread`用于启动新线程,传递函数名和参数列表。`exit_thread`函数用于终止当前线程。
2. 类包装线程对象:
Python的`threading`模块提供了更高级的线程管理功能,可以创建自定义的线程类。以下是一个使用`threading.Thread`的例子:
```python
import threading
import time
class Timer(threading.Thread): # 定义一个继承自threading.Thread的Timer类
def __init__(self, num, interval):
threading.Thread.__init__(self)
self.thread_num = num
self.interval = interval
self.thread_stop = False
def run(self): # 重写run()方法,指定线程要执行的任务
while not self.thread_stop:
print('ThreadObject(%d), Time: %s\n' % (self.thread_num, time.ctime()))
if __name__ == '__main__':
t1 = Timer(1, 1)
t2 = Timer(2, 2)
t1.start() # 启动线程
t2.start()
t1.join() # 等待t1线程结束
t2.join() # 等待t2线程结束
```
这个例子中,我们定义了一个名为`Timer`的线程类,通过`start`方法启动线程,`join`方法等待线程结束。
`threading.Thread`类提供了一些额外的功能,如线程同步(锁、条件变量等)、线程间通信(队列等)和线程优先级设置。相比于`thread`模块,`threading`模块更加推荐使用,因为它提供了更强大的功能和更好的异常处理机制。
Python的多线程编程允许开发者创建并发执行的任务,提高程序的执行效率。不过需要注意的是,由于GIL(全局解释器锁)的存在,Python的多线程在CPU密集型任务上并不能实现真正的并行计算,但在IO密集型任务中,多线程可以充分利用系统资源,提升程序性能。
2023-12-05 上传
2013-11-15 上传
2023-11-08 上传
2023-03-30 上传
2020-12-25 上传
2022-09-19 上传
2018-10-14 上传
2020-09-18 上传
2017-07-19 上传
sikao521
- 粉丝: 0
- 资源: 49
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码