python 多任务 学习三
Posted 黑无常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多任务 学习三相关的知识,希望对你有一定的参考价值。
多进程
概念
进程就是程序(.exe)文件执行并且系统给予分配资源后的统称(进程就是系统分配的最小资源)。
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。
在这里,我们所说的多进程,是一个程序执行后,在主进程中新建子进程,每个进程虽然只有一个线程,但多个进程可以一块执行多个任务。。
进程的创建及应用:
通过multiprocessing创建子进程,主进程会等待子进程执行完后才结束。
结果:
多任务,进程之间通信
一个进程中创建多个子进程,进程之间是相互独立的。
如,全局变量 a=0, 每个子进程在执行各自代码时,通过 a+=1来改变全局变量的值,但每个子进程都是从0开始+1,一直到结束,进程之间变量改变后并不会互相共享。
1. 队列(Queue)
队列,是可以帮助子进程之间相互通信的方法。
特点: 1. 在内存中开辟队列,执行速度快。 2. 可以设置队列中的数据个数 3. 先进先出,有序的 ......
2. 进程池 Pool
创建进程池及其中的子进程,主进程不会等待其结束,自己就会先结束,需要用join来等待(必须放在close,关闭进程池之后)。
想要同时进行的任务数量不多时,可以使用multiprocessing.Process来单独创建进程;
想要同时进行的工作很多,如复制一个文件夹下的所有文件,这时如果要同时复制多个文件,那需要创建的进程数会很多,资源浪费严重。这时,就需要进程池。
进程池,可以看成两部分:进程池和任务队列。
进程池-->先创建一个空的进程池对象,规定里边可以创建多少个进程数量。
任务队列-->将所有任务获取并保存,进程池中有空闲位置时,添加下一个任务到进程池,任务执行成为进程。
3. 实例:多任务copy文件夹下的文件
目的: 文件夹 imgs中包含图像100张, 使用 多进程 + 队列 实现多任务copy及进度计算
注意: 在使用multiproceesing模块下进程池库功能Pool时,原本需要使用multiprocessing.Queue调用的队列,此处改为使用multiprcessing下的Manager类中的Queue功能,具体如下调用
补充: 使用Queue队列,.get()阻塞等待 , 所以可以省略主进程中的po.join()
以上是关于python 多任务 学习三的主要内容,如果未能解决你的问题,请参考以下文章