python之进程and线程

1.线程池(独立)
-ThreadPool
python之进程and线程

结果
python之进程and线程
max_works代表最大线程处理数,即一次性最多处理的线程数量
f1.done( ) 判断任务是否执行
f1.result( ) 返回return值

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

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

python之进程and线程

执行后
python之进程and线程

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

python之进程and线程

python之进程and线程

6.派生多进程(通过继承的方式创建子进程)
python之进程and线程

python之进程and线程

7.多进程案例
python之进程and线程
先定义两个类,分别是线程和进程
python之进程and线程
两种方法(用线程和用进程) python之进程and线程
这是装饰器(计算运行程序所需时间)
python之进程and线程
执行结果如上

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

守护进程
同上
python之进程and线程
注意:此处不守护,但是等待时间为1秒,而程序运行等待时间为三秒,所以结果如下
python之进程and线程
此处守护,结果如下
python之进程and线程
等待时间少与程序运行时间,所以最后一句不执行。(父进程执行结束,子进程自动结束)

9.终止进程
python之进程and线程

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

python之进程and线程

10.进程间通信
-通过队列来实现进程间的通信;
python之进程and线程

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

python之进程and线程

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

python之进程and线程

python之进程and线程

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

12.进程池之ProcessPoolExecutor
python之进程and线程

python之进程and线程

线程池和进程池一样