这篇文章将为大家详细讲解有关深入浅析python中的多进程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
我们现代的操作系统,都是支持“多任务”的操作系统,对于操作系统来说,一个任务就是一个进程(过程),比如打开一个浏览器就是启动一个浏览器进程。
如果我们将计算器的核心CPU比喻为一座工厂,那么进程就像工厂里的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。
看到这大家可能会有一些疑问了,其他进程处于非运行状态,# 63;可是我用浏览器访问网页的时候,音乐播放器明明也在运行啊。
实际上是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。
<强> python中的多进程强>
在UNIX/LINUX操作系统中,可以使用叉()函数来创建.fork函数比其他普通函数有一点特殊之处,就是普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。
子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以叉出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。
fork()函数被封装在操作系统模块中。接下来,我们举例说明使用多进程和不使用多进程的区别:
从导入时间,睡眠 def download_task(文件名): 打印(& # 39;开始下载% s……& # 39;%文件名) time_to_download=randint (10) 睡眠(time_to_download) 打印(& # 39;% s下载完成!耗费了% d秒& # 39;%(文件名,time_to_download)) def main (): 开始时间=() download_task (& # 39; MySQL从删库到跑路。pdf,) download_task(& # 39;万万没想到mp4 # 39;) 结束=时间() 打印(& # 39;总共耗费了% .2f秒强生# 39;%(结束-开始))if __name__==& # 39; __main__ # 39;: main ()
执行结果:
开始下载MySQL从删库到跑路。pdf…
MySQL从删库到跑路pdf格式下载完成!耗费了9秒
开始下载万万没想到mp4…
万万没想到mp4下载完成!耗费了9秒
总共耗费了18.00秒。
引用>从上面的例子可以看的出,如果程序中的代码只能按顺序一点点的往下执行,那么即使执行两个毫不相关的下载任务,也需要先等待一个文件下载完成后才能开始下一个下载任务,很显然这并不合理也没有效率。接下来我们使用多进程的方式将两个下载任务放到不同的进程中,代码如下所示:
多处理导入过程 从操作系统导入getpid 从随机进口randint 从导入时间,睡眠 def download_task(文件名): 打印(& # 39;启动下载进程,进程号(% d)强生# 39;% getpid())打印(& # 39;开始下载% s……& # 39;%文件名)time_to_download=randint (10) 睡眠(time_to_download) 打印(& # 39;% s下载完成!耗费了% d秒& # 39;%(文件名,time_to_download)) def main (): 开始时间=() p1=过程(目标=download_task args=(& # 39; MySQL从删库到跑路。pdf # 39;,)) p1.start () p2=过程(目标=download_task args=(& # 39;万万没想到mp4 # 39;,)) p2.start () p1.join () p2.join () 结束=时间() 打印(& # 39;总共耗费了% .2f秒强生# 39;%(结束-开始)) if __name__==& # 39; __main__ # 39;:主要()执行结果:
启动下载进程,进程号(568408)。
开始下载万万没想到mp4…万万没想到。
mp4下载完成!耗费了6秒
启动下载进程,进程号(565896)。
开始下载MySQL从删库到跑路。
pdf…MySQL从删库到跑路pdf格式下载完成!耗费了10秒
总共耗费了10.09秒。
引用>运行上面的代码可以明显发现两个下载任务”同时“启动了,而且程序的执行时间将大大缩短,不再是两个任务的时间总和。
关于深入浅析python中的多进程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。
python中深入浅析的多进程