ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

python中的进程、线程、协程

2022-09-09 21:32:28  阅读:200  来源: 互联网

标签:协程 python 任务 线程 进程 密集型 执行


大家好,有时候会听到有人评价python编程执行效率方面相对java没有啥优势,其实是没有找到正确的打开方式,编程中无论是api还是执行脚本,无论是I/O密集型任务还是计算密集型任务,都有其提升执行效率的方式,通常,我们的优化手段就是并发编程,实现多任务同时执行,改善系统性能。
python中实现并发编程主要是依靠,进程、线程和协程,我们先来了解下三者的概念。
进程(process):是操作系统进行资源分配的基本单元,是CPU对程序的一次执行过程,每个进程都是独立的,有自己的内存空间、数据栈等。
线程(Thread):被包含在进程之中,是操作系统进行程序调度执行的最小单元。一个进程中至少有一个线程。
协程(Coroutine):比线程更小的执行单元,也被成为微线程。单个线程上执行多个任务,等待、切换执行任务,线程内切换没有切换开销,执行效率高。
下面我们来举个生活中的例子:
我们把生产工厂比作一个操作系统,一条生产线是一个进程,生产线上人就是一个线程,生产线上的工作就是需要完成的任务。如果我们想要提高生产的话。我们有下面几种办法:
第一种:增加生产线(相当于增加进程,多进程执行);
第二种:增加生产线上的人,提高生产(相当于增加线程,多线程执行);
第三种:生产线上总有做的快和慢的任务,会有一个等待的过程,那么,当出现任务等待的时候,可以先去做可以做的工作,待任务出现后再执行。充分里面劳动时间提升效率(任务等待、切换相当于使用协程完成任务);
从以上例子中我们就容易理解前面说的概念了。
接下来我们看一下,在python中的应用:
进程与多进程
python中依赖标准库mutiprocessing实现多进程任务,其中进程的常用方法:
多进程任务代码实例:
注意:上面进程的执行逻辑需要再run方法中实现,启动进程需要调用start方法,调用之后run方法便会执行。
线程与多线程
python依赖标准库Threading实现多线程,其中线程的常用方法有:
多线程实现实例:
执行结果:
python协程
协程的运行效率极高,切换完全由程序控制,不像进程和线程的切换需要花费系统的开销,并且协程不需要多线程的锁机制,因为只有一个线程。协程是微线程,对于计算密集型的任务都不太适用,但是对于I/O密集型的任务非常适用。如果遇到多核CPU且是计算密集型的任务,建议使用多进程+协程的方式,可以极大的提到性能。
我们一般通过asynio模块来实现协程及并发操作,代码实例如下:
需要注意的是:async和await这两个关键字只能在协程中使用;协程不能直接执行,需要在asyncio.run()中执行,也可以跟在await后面。
小结:为了提高执行效率,我们应该先分清任务类型。计算密集型任务更加适合多进程;I/O密集型任务适合多线程和协程;当然高并发下的最佳实践还是多进程+协程,可以极大提高执行效率,并且兼容了计算密集型任务和I/O密集型任务。

标签:协程,python,任务,线程,进程,密集型,执行
来源: https://www.cnblogs.com/bkycnd/p/16673991.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有