python之进程and线程

1.线程池(独立)
-ThreadPool
在这里插入图片描述

结果
在这里插入图片描述
max_works代表最大线程处理数,即一次性最多处理的线程数量
f1.done( ) 判断任务是否执行
f1.result( ) 返回return值
2.线程池和map函数
在这里插入图片描述
在这里插入图片描述

1.Linux创建子进程
Linux创建子进程的原理
-父进程和子进程,如果父进程结束,子进程也随之结束;
-先有父进程,再有子进程,通过fork函数实现

fork函数的返回值:调用该方法一次,返回两次;
os.fork( )
os.getpid( ) 获取当前进程的pid
os.getppid( ) 获取当前进程的父进程的id号

在这里插入图片描述

执行后
在这里插入图片描述

2.创建子进程(通过实例化)
多线程:I/O密集型任务
多进程:充分利用CPU,将任务提交给多个CPU去执行,处理计算密集型任务;

在这里插入图片描述

在这里插入图片描述

6.派生多进程(通过继承的方式创建子进程)
在这里插入图片描述

在这里插入图片描述

7.多进程案例
在这里插入图片描述
先定义两个类,分别是线程和进程
在这里插入图片描述
两种方法(用线程和用进程) 在这里插入图片描述
这是装饰器(计算运行程序所需时间)
在这里插入图片描述
执行结果如上

8.守护进程
守护线程
setDeamon:
True:主线程执行结束,子线程不再继续执行;
False:不守护

守护进程
同上
在这里插入图片描述
注意:此处不守护,但是等待时间为1秒,而程序运行等待时间为三秒,所以结果如下
在这里插入图片描述
此处守护,结果如下
在这里插入图片描述
等待时间少与程序运行时间,所以最后一句不执行。(父进程执行结束,子进程自动结束)

9.终止进程
在这里插入图片描述

此处terminate( ) 意为终止子进程,但是需要时间
此处join( ) 意为等待子进程彻底终止
is_alive( ) 判断进程是否终止

在这里插入图片描述

10.进程间通信
-通过队列来实现进程间的通信;
在这里插入图片描述

因为consumer类里的run函数会从队列里拿数字,所以此处要用terminate( )停止子进程,否则进程永远不会结束

在这里插入图片描述

11.进程池
why进程池?
–如果启动大量子进程,会消耗时间用来创建和销毁子进程;
–使用进程池,不需要启动大量的进程;

在这里插入图片描述

在这里插入图片描述

注意,进程池结束用的是 close 而不是terminate

12.进程池之ProcessPoolExecutor
在这里插入图片描述

在这里插入图片描述

线程池和进程池一样

猜你喜欢

转载自blog.csdn.net/weixin_42719822/article/details/82773380
今日推荐