Python中的进程(多任务的创建方法一:fork函数)

最近几天一直在做飞机大战的那个小项目,所以就没有更新博客,到昨天才把基础的功能全部实现,整体的框架已经成型,游戏也可以流畅运行,就是有些功能还不太完善,以后慢慢完善吧,今天给大家分享一下,我对python进程的理解吧。(因为我也是初学者,所以总结的都已一些基础的知识,深层次的知识我还打不到那个水平)

一、我们先来说说什么是程序什么是进程。

1,编写完毕的代码,在没有运行的时候,就称之为程序。
2,正在运行的代码,就称之为进程。
进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的。

二、为什么要创建多任务?什么是多任务?

我们先来说说什么是多任务吧,就好比一个人吃着零食听着歌又刷着微博,在宏观上面来说,他在同一时间干着不同的事,但是从微观上说,他又不是同时进程这么多的任务。
现在随着科技的进步,我们使用的的计算机都是多核的,不同的CPU处理着不同的事件,但是在一起计算机还只是单核的时候,也可以同时进行多个任务这是为什么呢?因为CPU的运算处理能力非常强大,比如有3个任务,0.1秒CPU处理第一个任务,0.2秒CPU处理第二个任务,0.3秒处理第三个任务,由于速度非常快,所以我们就认为是同时在进行,因为任务量总是大于CPU的数量的,所以CPU都是交替分配时间来处理任务的。那么谁来决定CPU在什么时候处理什么事件呢?这就牵扯到操作系统了,不同操作系统有自己不同的算法,个调度模式,这种事是我们自己写代码无法改变的。由操作系统本身决定的。

三、下面我们就来介绍一fork函数(创建多进程)

python中提供了丰富的模块,在OS模块中就有fork这个函数,我们使用fork可以在python程序中轻松创建子进程。
如下图,我们就写一个简单的代码,来了解一下。
这里写图片描述
这里写图片描述
解释之前我们先了os模块中的一个方法,os.getpid()——调用次函数可以得到当前进程(也就是子进程)的ID编号和os.getppid()——调用此函数可以得到当前进程(也就是子进程)的父类的ID编号

如图,if语句和else语句中打印了,这就是fork()调用,返回两次,因为操作系统自动把当前程序(父进程)复制了一份(称为子进程)分别在父进程和子进程内放回。
我们用一个变量pid来接收返回值。
子进程的返回值永远是0,这就进入了if语句,为True,打印第一句话,而父进程的返回值就是子进程的ID编号,所以进入else语句,打印第二句话。

四:接下来我们说一下在多进程中的全局变量
照旧,我先上一个简单的代码图
这里写图片描述
这里写图片描述
大家应该都能看懂是什么情况,所以多进程中,每个进程中的所有数据(包括全局变量)都各自拥有一份,互不影响。

五:最后我们再说一下多次fork的问题

一个程序调用一次fork()就会变成两个进程,如果我们调用两次呢?是否会有三个进程呢?
答案当然不是,会长生四个进程,因为第一次fork产生的子程序经过第二次fork也会产生一个新的子进程。
代码我就不给大家写了,大家可以自己动手试一试。
我给大家贴一张多次fork的逻辑思维图吧
这里写图片描述

六:这次是真的最后了,必须要注意
**fork函数只能在Unix/Linux/Mac系统上面运行,Windows系统不支持,那么在Windows系统中我们就不能创建多进程了吗?答案是当然能啊,只不过要使用别的方法,在下篇文章中,我再给大家总结一下吧。

如果大家有想要了解共同学习python的话,可以留言,我们一起讨论,共同进步,做一个不是那么菜的程序猿吧!
加油!

猜你喜欢

转载自blog.csdn.net/SenZendao/article/details/81636639
今日推荐