Python中的多进程1

熟练的使用多进程的模型来编程,是一个coder的很重要的能力。下面来讨论一下python语言描述的多线程。

下面是一个python的单进程的例子

from time import sleep,ctime
from multiprocessing import Process

def loop0():
    print ('start loop0 at : ',ctime())
    sleep(4)
    print ('loop0 end at : ',ctime())

def loop1():
    print ('start loop1 at : ',ctime())
    sleep(2)
    print ('loop1 end at : ',ctime())

def SingleProcess():
    print ('start at : ',ctime())
    loop0()
    loop1()
    print ('all Done at :',ctime())

那么程序运行的结果是:


Python中的多进程1_第1张图片
image.png

程序运行6s

如果将程序改成多进程的模型:

from time import sleep,ctime
from multiprocessing import Process

def loop0():
    print ('start loop0 at : ',ctime())
    sleep(4)
    print ('loop0 end at : ',ctime())

def loop1():
    print ('start loop1 at : ',ctime())
    sleep(2)
    print ('loop1 end at : ',ctime())

def SingleProcess():
    print ('start at : ',ctime())
    loop0()
    loop1()
    print ('all Done at :',ctime())

if __name__=='__main__':
    print ('start at : ',ctime())
    p1=Process(target=loop0)
    p2=Process(target=loop1)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print ("end at : ",ctime())

相当于常见两个进程,一个执行loop0,一个执行loop1,那么程序的运行结果是:

Python中的多进程1_第2张图片
image.png

程序运行4s

为什么这样呢?
因为两个进程并发了
这是并发的定义

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,
且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

所以,程序原来的模型是
loop0 执行完之后 loop1再执行,loop0启动之后,休眠4s,在休眠的时候,操作系统会进行进程调度,比如执行其他的进程。那么其他的进程是什么呢?

Python中的多进程1_第3张图片
image.png
Python中的多进程1_第4张图片
image.png

这些都是系统上跑的进程。linux会按照自己的规则进行进程调度。也就是说在执行loop0的时候,它休眠4s,那么这时候,会发生进程调度。cpu转去执行其他的进程。4s之后,loop0唤醒,加入到就绪队列,重新获得cpu,然后继续执行loop1。所以程序需要执行6s。

在多线程的模型下,启动一个进程去执行loop0,同时还会创建一个进程去执行loop1。在loop0休眠4s的时候,loop1会获得cpu,执行自己的程序。所以,loop0 和loop1是平行的关系。
所以,程序需要执行4s。

PS: 这边文章说的是进程的事情,没有谈线程,不要搞混了。

你可能感兴趣的:(Python中的多进程1)