
python学习-多线程、多进程
thread模块:提供基本的多线程接口,适合低层次操作。 threading模块:基于对象的接口,更易于使用,支持继承Thread类创建线程,同时提供Lock、RLock等同步机制。
发布日期:2021-05-07 08:14:30
浏览次数:22
分类:精选文章
本文共 2207 字,大约阅读时间需要 7 分钟。
Python中的多线程和多进程是处理并行任务的两种主要方式,这两种机制在性能优化中扮演着重要角色。以下是对这两种技术的详细分析。
多线程
多线程是指在同一个进程内启动多个线程执行任务。与多进程相比,多线程在处理I/O密集型任务时更为高效,但其并行效果受到全局解释器锁(GIL)的限制,导致多线程执行实际上是交替式进行的。
多线程的适用场景
多线程适用于I/O密集型任务,如网络请求、文件读写等。由于线程可以更高效地轮询和等待I/O操作,因此在这些场景中,多线程可以显著提升性能。
Python中的多线程接口
Python提供了两种主要的多线程接口:
多线程示例
以下是一个使用threading模块创建多线程的示例:
import timeimport randomfrom threading import Threaddef download_file(name): print(f'开始下载{name}...') start_time = time.time() delay = random.randint(5, 10) time.sleep(delay) end_time = time.time() print(f'下载完成,耗时为:{end_time - start_time:.2f}秒')def main(): start_time = time.time() file1 = 'Python从入门到实践' file2 = '深入浅出MySQL' t1 = Thread(target=download_file, args=(file1,)) t2 = Thread(target=download_file, args=(file2,)) t1.start() t2.start() t1.join() t2.join() end_time = time.time() print(f'总计耗时:{end_time - start_time:.2f}秒')if __name__ == '__main__': main()
多进程
多进程是指在操作系统内创建多个独立的进程执行任务。由于每个进程占用独立的内存空间,多进程在处理计算密集型任务(如图形处理、音视频编解压)中表现优异,能够充分利用多核多CPU的优势。
多进程的适用场景
多进程适用于计算密集型任务和I/O密集型任务。对于前者,多进程可以更好地利用多核资源;对于后者,多进程可以提高I/O操作的吞吐量。
Python中的多进程接口
Python中的多进程支持通过multiprocessing
模块实现。该模块提供了多种工具,包括Process、Queue、Pipe等,方便地在进程间进行通信和管理。
多进程示例
以下是一个使用多进程创建并行进程的示例:
import randomimport timefrom multiprocessing import Processdef upload_file(name): print(f'开始上传{name}') time.sleep(random.randint(3, 8)) print(f'{name}上传完成')def download_file(name): print(f'开始下载{name}') time.sleep(random.randint(5, 10)) print(f'{name}下载完成')def main(): start_time = time.time() # 创建并启动进程 p1 = Process(target=download_file, args=('Python网络爬虫开发',)) p1.start() p2 = Process(target=download_file, args=('Python从入门到实践',)) p2.start() p3 = Process(target=upload_file, args=('深入浅出MySQL',)) p3.start() # 等待所有进程完成 p1.join() p2.join() p3.join() end_time = time.time() print(f'总共耗时:{end_time - start_time:.3f}秒')if __name__ == '__main__': main()
总结
多线程和多进程是Python中处理并行任务的两种主要方式。多线程适用于I/O密集型任务,而多进程则更适合计算密集型任务。在实际应用中,根据任务的性质选择合适的并行模型可以显著提升性能。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月18日 17时03分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[菜鸟的设计模式之旅]观察者模式
2019-03-06
Spring-继承JdbcDaoSupport类后简化配置文件内容
2019-03-06
Java基础IO流(一)
2019-03-06
Hibernate入门(四)---------一级缓存
2019-03-06
MySQL事务(学习笔记)
2019-03-06
一个web前端开发者的日常唠叨
2019-03-06
内存分配-slab分配器
2019-03-06
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
2019-03-06
Jupyter Notebook 暗色自定义主题
2019-03-06
[Python学习笔记]组织文件
2019-03-06
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2019-03-06
从RocketMQ的Broker源码层面验证一下这两个点
2019-03-06
如何正确的在项目中接入微信JS-SDK
2019-03-06
纵览全局的框框——智慧搜索
2019-03-06
快服务流量之争:如何在快服务中占领一席之地
2019-03-06
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2019-03-06
Unity平台 | 快速集成华为性能管理服务
2019-03-06
详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
2019-03-06
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2019-03-06
使用Power BI构建数据仓库与BI方案
2019-03-06