python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?

Python对并发编程的支持非常丰富,可以使用多线程、多进程、协程等方式进行并发编程。那么,应该如何选择呢?

Python并发编程有哪些方式

Python并发编程有三种方式:

  • 多线程Thread
  • 多进程Process
  • 多协程Coroutine

什么是CPU密集型计算、IO密集型计算?

CPU密集型(CPU-bound):

CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高。

例如:

  • 压缩解压缩
  • 加解密
  • 正则表达式搜索

IO密集型(I/O bound)

IO密集型指的是系统运作大部分的状态是CPU在等待IO的读写操作,CPU占用率依然较低。

例如:

  • 文件处理程序
  • 网络爬虫程序
  • 读写数据库程序

多线程,多进程,多协程的对比

python并发编程有三种方式: 多线程Thread多进程Process多协程Coroutine

多线程Process(multiprocessing)

优点:

  • 相比进程,更轻量级,占用资源少

缺点:

  • 相比进程:多线程只能并发执行,不能利用多CPU(GIL)
  • 相比协程:启动书面有限制,占用内存资源,有线程切换开销

使用于:IO密集型计算、同时运行的任务数目要求不多。

多进程Thread(threading)

优点:

  • 可以利用多核CPU并行运算

缺点:

  • 占用资源最多、可以启动数目比线程少

使用于:CPU密集型计算

多协程Coroutine(asyncio)

优点:

  • 内存开销最少。启动协程数目最多

缺点:

  • 支持的库有限制(aiohttp VS requests)、代码实现复杂

适用于:IO密集型计算、需要超多任务运行、但有现成库支持的场景

怎样根据任务选择对应技术

  • 如果是CPU密集型计算,使用多进程multiprocessing
  • 如果是IO密集型计算,则考虑多线程或者多线程。
  • 如果任务量大,有现成协程库支持,协程实现的复杂度可接受则首选协程,否则选线程。
目录
相关文章
|
6天前
|
安全 调度 Python
探索Python中的并发编程:协程与多线程的比较
本文将深入探讨Python中的并发编程技术,重点比较协程与多线程的特点和应用场景。通过对协程和多线程的原理解析,以及在实际项目中的应用案例分析,读者将能够更好地理解两种并发编程模型的异同,并在实践中选择合适的方案来提升Python程序的性能和效率。
|
4天前
|
Java 测试技术 Python
Python的多线程允许在同一进程中并发执行任务
【5月更文挑战第17天】Python的多线程允许在同一进程中并发执行任务。示例1展示了创建5个线程打印"Hello World",每个线程调用同一函数并使用`join()`等待所有线程完成。示例2使用`ThreadPoolExecutor`下载网页,创建线程池处理多个URL,打印出每个网页的大小。Python多线程还可用于线程间通信和同步,如使用Queue和Lock。
17 1
|
5天前
|
数据处理 Python
Python并发编程:实现高效的多线程与多进程
Python作为一种高级编程语言,提供了强大的并发编程能力,通过多线程和多进程技术,可以实现程序的并发执行,提升系统的性能和响应速度。本文将介绍Python中多线程和多进程的基本概念,以及如何利用它们实现高效的并发编程,解决实际开发中的并发性问题。
|
6天前
|
Java 调度
【Java多线程】对进程与线程的理解
【Java多线程】对进程与线程的理解
15 1
|
6天前
|
消息中间件 程序员 调度
Python并发编程:利用多线程提升程序性能
本文探讨了Python中的并发编程技术,重点介绍了如何利用多线程提升程序性能。通过分析多线程的原理和实现方式,以及线程间的通信和同步方法,读者可以了解如何在Python中编写高效的并发程序,提升程序的执行效率和响应速度。
|
6天前
|
存储 Linux Shell
Linux:进程等待 & 进程替换
Linux:进程等待 & 进程替换
30 9
|
6天前
|
存储 Linux C语言
Linux:进程创建 & 进程终止
Linux:进程创建 & 进程终止
29 6
|
6天前
|
Unix Linux 调度
linux线程与进程的区别及线程的优势
linux线程与进程的区别及线程的优势
|
6天前
|
存储 安全 Linux
【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念
【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念
|
6天前
|
Linux C++
【Linux】详解进程程序替换
【Linux】详解进程程序替换