一.进程
- 概念:一个程序运行的代码+用到的资源,操作系统分配资源的基本单元。
- 程序:静态概念 存在于外存上的一段文件数据
- 进程:动态概念 数据与资源的统称
- 经典三个状态:
-
- 就绪态:全部就绪,只等cpu
- 执行态:cpu正在执行功能
- 等待态:等待某些条件满足(input sleep)
- 就绪态—— cpu分配时间片——> 执行态——等待条件—— >等待态——满足条件—— >就绪态
- 进程的创建
-
- 引用multiprocessing模块,使用 Precess类,进程类。
- 创建过程
-
- from multiprocessing import Precess
- import time,os
- def fun():
- print(“创建子进程”)
- Print(“这是子进程%d,子进程的父进程%d”%os.getpid(),os.getppid())
- time sleep(2)
- if __name__ == “__main__”
- N = Multiprocessing.Process(target= fun)
- N.start()
- While True:
- Print(“这是主进程ID%d”%os.getpid())
- N.is_alive()判断进程是否活着 返回bool值
- N.join() 主进程等待子进程结束 主进程阻塞等待退出,join 可添加参数 最多等多少秒
- N.terminate() 是一个信号 通知系统关闭子进程 因此需要等一段时间 子线程才会结束 配合join使用
- N.name() 进程名字 N.getpid() 进程号
- linux 命令 ps aux 查看进程
- os.getpid()获取子进程号 os.getppid()获取子进程的父进程号
- 进程间不共享全局变量 ,原因 进程是独立的空间,
- 进程间通信Queue 队列类
-
- get 获取数据
-
- get(block=True, timeout=-1])
- block表示是否阻塞等待 True表示阻塞等待 False表示不阻塞 不等待
- timeout 表示如果等待 等待最长的时间 -1表示死等
- put 接收数据
-
- put(obj, block, timeout)
- obj表示数据对象
- block表示是否阻塞等待 True表示阻塞等待 False表示不阻塞 不等待
- timeout 表示如果等待 等待最长的时间,-1表示死等
- Queue的参数 最大可接收队列
- Queue.full()判断队列是否满 返回bool
- Queue.empty()
- Queue.qsize()判断队列长度 返回int(Mac不支持)
二、进程与线程
进程是操作系统资源分配的基本单位,资源消耗大
线程是操作系统资源的调度单位,资源消耗小,但不便管理
三、进程池
创建进程池
po = multiprocessing.Pool(3) 参数代表最大进程数
添加任务
1.阻塞任务添加方式,会阻塞等待任务执行完成。
Pool.apply(func=指定函数,args=())
2.非阻塞任务添加方式,不阻塞等待任务完成
pool.apply_async()
主进程一旦退出会导致所有任务结束
关闭进程池 —不允许添加任务
Pool.close()
pool.terminate()暴力终止
等待所有任务完成
Pool.join()
3.进程池中的通信 不同与进程中的processing.Queue()
进程池中的通信:multiprocessing.Manager().Queue()
.close().terminate()一般加上join()使用