python之多任务,进程(fork)

  • A+
所属分类:python基础入门

多任务

什么叫“多任务”呢?简单地说,就是操作系统可以同时运⾏多个任务。比如⼀边在⽤浏览器上⽹,⼀边在听MP3,⼀边在⽤Word写文档,这就 是多任务,⾄少同时有3个任务正在运⾏。还有很多任务悄悄地在后台同时运 ⾏着,只是桌⾯上没有显示⽽已。

时间片轮转

现在,多核CPU已经⾮常普及了,但是,即使过去的单核CPU,也可以执⾏ 多任务。由于CPU执⾏代码都是顺序执⾏的,那么,单核CPU是怎么执⾏多 任务的呢? 答案就是操作系统轮流让各个任务交替执⾏,任务1执⾏0.01秒,切换到任务 2,任务2执⾏0.01秒,再切换到任务3,执⾏0.01秒……这样反复执⾏下去。 表⾯上看,每个任务都是交替执⾏的,但是,由于CPU的执⾏速度实在是太 快了,我们感觉就像所有任务都在同时执⾏⼀样。

真正的并⾏执⾏多任务只能在多核CPU上实现,但是,由于任务数量远远多 于CPU的核⼼数量,所以,操作系统也会⾃动把很多任务轮流调度到每个核 ⼼上执⾏。

进程

进程是指在操作系统中正在运行的一个应用程序,

Fork()

Python的os模块封装了常⻅的系统调⽤,其中就包括fork,可以在Python程 序中轻松创建⼦进程:

# 注意,fork()函数,只在Unix/Linux/Mac上运⾏,windows不可以

import os

ret =os.fork() #创建进程

print ("test")

if ret>0: #子进程的ret为0 ,父进程不为 0

print "父进程"

esle :

print "子进程"

程序执⾏到os.fork()时,操作系统会创建⼀个新的进程(⼦进程),然后 复制⽗进程的所有信息到⼦进程中 然后⽗进程和⼦进程都会从fork()函数中得到⼀个返回值,在⼦进程中这 个值⼀定是0,⽽⽗进程中是⼦进程的 id号

提供了⼀个fork()系统函数,它⾮常特殊。 普通的函数调⽤,调⽤⼀次,返回⼀次,但是fork()调⽤⼀次,返回两次,因 为操作系统⾃动把当前进程(称为⽗进程)复制了⼀份(称为⼦进程),然 后,分别在⽗进程和⼦进程内返回。 ⼦进程永远返回0,⽽⽗进程返回⼦进程的ID。 这样做的理由是,⼀个⽗进程可以fork出很多⼦进程,所以,⽗进程要记下 每个⼦进程的ID,⽽⼦进程只需要调⽤getppid()就可以拿到⽗进程的ID。

多级fork

os.fork()

os.fork()

os.fork()

会出现8个进程

ret=Os.fork()

If ret ==0:

Os.fork()

Else:

Print “#######”

会出现3个进程,在fork⽗进程、⼦进程执⾏顺序没有规律,完全取决于操作系统的调度算法

**由于windows下fork不能使用,虚拟机还没来得及安装,这里就不演示fork的例子了,下次介绍在linux、mac和windows下都可以创建进程的方法,

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: