没有合适的资源?快使用搜索试试~ 我知道了~
Python中多线程与多进程的应用和技术详解
需积分: 5 2 下载量 29 浏览量
2024-10-15
21:09:42
上传
评论
收藏 408KB PDF 举报
温馨提示
内容概要:本文介绍了Python中的多线程和多进程的概念,详细探讨了两者的区别和联系,以及在各种实际场景中(如网络爬虫、数据处理和GUI应用)的具体应用实例,同时还深入探讨了多线程和多进程的高级话题,比如线程间的死锁情况、GIL(全局解释器锁)、以及如何使用asyncio进行异步IO操作以及multiprocessing进行并行计算,全面地剖析了这两种机制在并发处理中发挥的不同作用。 适合人群:Python开发者尤其是有一定基础想要深化理解和应用多线程多进程的知识的人群。 使用场景及目标:适用于任何需要优化执行效率的情况,特别是涉及到I/O密集或CPU密集型工作的项目。学习如何根据不同业务特征灵活选择使用线程或进程。 其他说明:通过对Python中多线程多进程技术细节的掌握可以帮助更好地解决并发编程问题,优化应用性能。同时,本文提供的案例涵盖了广泛的实用技术应用场景,有助于读者快速上手。
资源推荐
资源详情
资源评论






















1
脚本编程语言:Python:Python 多线程与多进程
1 Python 基础概念
1.1 Python 语言简介
Python 是一种高级、解释型、通用的编程语言,以其简洁和清晰的语法著
称。它支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。
Python 的设计哲学强调代码的可读性和简洁的语法,同时提供了丰富的库和工
具,使得它在 Web 开发、数据科学、人工智能、自动化脚本、网络爬虫等领域
广泛应用。
1.1.1 特点
易学性:Python 的语法接近自然语言,易于学习和理解。
跨平台性:Python 可以在多种操作系统上运行,包括 Windows、
Linux 和 Mac OS。
动态类型:Python 是一种动态类型语言,变量的类型在运行时自
动确定。
丰富的库:Python 拥有庞大的标准库和第三方库,覆盖了各种应
用领域。
1.1.2 应用领域
Web 开发:使用 Django 或 Flask 框架开发 Web 应用。
数据科学:利用 Pandas、NumPy 和 Matplotlib 进行数据分析和可
视化。
机器学习:通过 Scikit-learn、TensorFlow 和 PyTorch 进行模型训练
和预测。
自动化脚本:编写系统管理脚本,自动化日常任务。
网络爬虫:使用 BeautifulSoup 或 Scrapy 抓取网页数据。
1.2 Python 中的线程与进程
1.2.1 线程
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是
进程中的实际运作单位。一个进程可以包含多个线程,这些线程共享进程的资
源,如内存和文件描述符,但每个线程有自己的栈和局部变量。线程的切换开
销比进程小,适合处理高并发的 I/O 密集型任务。

2
1.2.1.1 示例代码
import threading
import time
def worker(num):
"""
线程执行的函数
"""
print(f'Worker {num} started')
time.sleep(2)
print(f'Worker {num} finished')
#
创建线程
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
t.start()
#
等待所有线程完成
for t in threads:
t.join()
1.2.2 进程
进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位。每
个进程都有独立的地址空间和系统资源,进程间的切换开销较大,但可以并行
执行 CPU 密集型任务,不受全局解释器锁(GIL)的影响。
1.2.2.1 示例代码
import multiprocessing
def worker(num):
"""
进程执行的函数
"""
print(f'Worker {num} started')
time.sleep(2)
print(f'Worker {num} finished')
#
创建进程
processes = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
processes.append(p)

3
p.start()
#
等待所有进程完成
for p in processes:
p.join()
1.3 线程与进程的区别
1.3.1 资源共享
线程:线程共享进程的资源,如内存和文件描述符,这使得线程
间通信简单。
进程:进程有独立的资源,进程间通信需要通过 IPC(进程间通信)
机制,如管道、消息队列等。
1.3.2 并发执行
线程:线程在单个进程中并发执行,但受 GIL 限制,可能无法充
分利用多核 CPU。
进程:进程可以并行执行,不受 GIL 限制,适合 CPU 密集型任务。
1.3.3 切换开销
线程:线程切换开销小,适合 I/O 密集型任务。
进程:进程切换开销大,但可以实现真正的并行。
1.3.4 代码示例对比
#
线程示例
import threading
import time
def thread_task():
print('Thread started')
time.sleep(1)
print('Thread finished')
#
创建线程
thread = threading.Thread(target=thread_task)
thread.start()
thread.join()
#
进程示例
import multiprocessing

4
def process_task():
print('Process started')
time.sleep(1)
print('Process finished')
#
创建进程
process = multiprocessing.Process(target=process_task)
process.start()
process.join()
通过以上对比,我们可以看到线程和进程在 Python 中的使用方式,以及它
们各自的特点和适用场景。在实际开发中,根据任务的性质选择合适的并发模
型,可以有效提升程序的执行效率和响应速度。
2 多线程编程
2.1 创建线程
在 Python 中,可以使用 threading 模块来创建和管理线程。创建线程的基
本步骤是定义一个线程类或使用 Thread 类的 target 参数来指定一个函数,然后
实例化线程并启动它。
import threading
#
定义线程类
class MyThread(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
print(f"
线程
{self.name}
正在运行
")
#
创建线程实例
thread1 = MyThread("
线程
1")
thread2 = MyThread("
线程
2")
#
启动线程
thread1.start()
thread2.start()
#
等待所有线程完成
thread1.join()
thread2.join()

5
print("所有线程完成")
或者,使用 target 参数来指定一个函数:
import threading
def print_numbers(name):
for i in range(1, 11):
print(f"
线程
{name}: {i}")
#
创建线程实例
thread1 = threading.Thread(target=print_numbers, args=("
线程
1",))
thread2 = threading.Thread(target=print_numbers, args=("
线程
2",))
#
启动线程
thread1.start()
thread2.start()
#
等待所有线程完成
thread1.join()
thread2.join()
print("
所有线程完成
")
2.2 线程同步:锁与条件变量
2.2.1 锁
锁(Lock)是一种同步机制,用于确保多个线程不会同时访问共享资源。
在 Python 中,可以使用 threading.Lock()来实现锁。
import threading
#
创建锁
lock = threading.Lock()
#
定义线程类
class MyThread(threading.Thread):
def __init__(self, name, numbers):
threading.Thread.__init__(self)
self.name = name
self.numbers = numbers
def run(self):
for number in self.numbers:
剩余21页未读,继续阅读
资源评论



zhubeibei168
- 粉丝: 2w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 中国联通通信综合楼桩基工程竣工资料.doc
- 无线网络优化设计方案.doc
- Git高级技巧大全之全面深入基础教程
- 数据中心与大数据安全方案-电科院.docx
- 大数据时代高校财务管理的机遇、挑战和对策研究.docx
- 互联网+节能服务行业政策汇总及解读.docx
- 基于微课的中职计算机教学探究.docx
- 大数据分析技术在生活中的广泛应用.docx
- jspservletjavabean网上订餐系统大学本科方案设计书.doc
- PPP技术和网络RTK技术在电力勘测发展中的作用.docx
- 党内管理软件安装问题.doc
- 东湖龙35KV变电站监控软件方案设计课程方案设计.doc
- 专业技术人员考试网络设备互连分卷.docx
- 办公楼大厦综合布线设计方案.doc
- 计算机网络实验---.doc
- 我国图书馆书目数据库建设质量控制刍议.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
