进程
使用进程可以充分利用cpu资源,是cpu分配资源的基本单元每一个进程都有自己的内存空间,
同样是无序进行,进程之间资源不共享,多用进程处理计算密集型人物,进程可以实现并行的操作
计算密集型任务的特点:是要进行大量的计算,小号CPU资源,比如计算圆周率,对视频进行高清解码等等,全靠CPU的运算能力。
计算密集型任务可以用多任务完成,但是任务越多,华在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型人物同时进行的数量应当等于CPU的核心数
计算密集型
from multiprocessing import Proces python中使用multiprocessing创建进程(是跨平台一个库)
创建进程 myProcess = Process( target=执行函数,args=(参数,)) |
---|
target:Optional[Callable] = (进程执行的函数) |
name:Optional[str] = (进程名称) |
args:lterable[Any] = (传参数) |
kwargs:Mapping[Any,Any] = (传参数) |
daemon:Optional[bool] = ) (设置前后台进程) |
- start() 启动
- 堵塞进程(进程同步) join()
- 获取进程id:os.getpid() (获取当前进程id) os.getppid()(获取当前进程父id)
- 强行终止:terminate()
进程池方式一 |
---|
from multiprocessing import Pool |
p = Pool(进程数量) |
不设置进程数量,则Pool的默认大小是CPU的核数 |
p.apply_async(执行函数, args=(参数,),callback=回调函数)异步 |
p.apply(执行函数,args=(参数,)callback=回调函数)同步 |
p.close() 关闭 |
p.join() 堵塞 |
对Pool对象调用join()方法会等待所有子进程执行完毕,调用join之前必须先调用close(),调用close()之后就不能继续添加新的Process了. |
进程法师二 |
---|
from concurrent.futures import ProcessPoolExecutor |
p = ProcessPoolExecutor(max_workers=2) |
max_workers=设置进程池中最大的进程数 |
result = ProcessPool.submit(执行函数,参数1,) |
result.add_done_callback(回调函数) |
p.shutdown(wait=True) |
对ProcessPoolExecutor对象调用shutdown()方法会等待所有子线程执行完毕 |