python之进程and线程
1.线程池(独立)
-ThreadPool
结果
max_works代表最大线程处理数,即一次性最多处理的线程数量
f1.done( ) 判断任务是否执行
f1.result( ) 返回return值
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
线程池和进程池一样