导图社区 python多进程基本原理
python多进程基本原理,进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,是资源分配和调度的一个独立单位。
https和http基本学习,HTTP是超文本传输协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
Scrapy框架,引擎:框架的核心,其他组件在其控制下协同工作;调度器,负责对spider提交的下载请求进行调度;爬虫,负责提取页面中的数据,并产生对新页面的下载请求。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
多进程基本原理
多进程的含义
进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,是资源分配和调度的一个独立单位
多进程就是启用多个进程同时运行
由于进程是线程的集合,而进程是由一个或多个线程构成的,所以多进程的运行意味着有大于或等于进程数量的线程在运行
python多进程的优势
由于GIL的存在,多线程不能很好发挥多核的优势
对于多进程,每个进程都有属于自己的GIL,所以在多核处理器下,多进程的运行不会受GIL的影响。
注意:由于进程是系统进行资源分配和调度的一个独立单位,所以各个进程之间的数据是无法共享的,如多个进程无法共享一个全局变量,进程之间的数据共享需要有单独的机制来实现。
多进程的实现
multiprocessing
Process进程
Queue队列
Semaphore信号量
Pipe管道
Lock锁
Pool进程池
直接使用Process类
Process([group [, target [, name [ , args [, kwargs ]]]]])
taget 表示调用对象
args表示被调用对象的位置参数元组
注意:args必须是个元组,如果参数只有一个,那么也要在元组的第一个元素后面加一个逗号
kwargs表示调用对象的字典
那么是别名,相当于给这个进程取个名字
group 分组
继承Process类
class MyProcess(Process): def __init__(self, loop): Process.__init__(self) self.loop = loop def run(self): for count in range(self.loop): time.sleep(3) print(f'Pid:{self.pid} loopCount:{count}')
守护进程
如果一个进程被设置为守护进程,当父进程结束后,子进程会自动被终止,我们可以通过设置 daemon 属性来控制是否为守护进程
进程等待
在调用 start 和 join 方法后,父进程就可以等待所有子进程都执行完毕后,再打印出结束的结果
可以给 join 方法传递一个超时参数,代表最长等待秒数。如果子进程没有在这个指定秒数之内完成,会被强制返回,主进程不再会等待。
终止进程
可以调用terminate方法
在调用 terminate 方法之后,我们用 is_alive 方法获取进程的状态发现依然还是运行状态。在调用 join 方法之后,is_alive 方法获取进程的运行状态才变为终止状态。
进程互斥锁
避免多个进程同时抢占临界区(输出)资源,我们可以通过multiprocessing中的Lock来实现。
Lock,即锁,在一个进程输出时,加锁,其他进程等待。等此进程执行结束后,释放锁,其他进程可以进行输出。