python 进程和串行,——

进程

1、什么是串行?

串行:就是一个程序完完整整的运行完了,下个程序才运行。

2、什么是进程?

进程:一个正在运行的程序或一个程序运行的过程。

为什么要用进程。

提高程序执行效率。

多道技术:并发技术的诞生之源

多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中,占用内存是

彼此隔离的,而且是物理层面隔离的,遇到io切换,下个程序运行,这样cpu不用等io完,才工作,大大提高了效率

时间上的复用:多个任务共用一个cpu,一个任务占用cpu时间过长,或者有另外一个优先级更高的任务抢走

cpu,cpu也在不断的切换的执行,仿并发,效率低。

总结:多进程不适合,计算密集型

3、进程两种调用方法。

  

import time

from multiprocessing import Process


def task(x):
    print('%s is running'%x)
    time.sleep(3)
    print('%s is done'%x)

if __name__ == "__main__":为什么要加这个?因为在windows操作系统,复制父进程的内容,是以模块导入的形式,如果不这样写,创建一个子进程,初始复制主进程的内容,会不断的被创建
    #process(target=task,kwargs={'x':'子进程'})
    p = Process(target=task,args=('子进程',))
#为什么不是子进程先运行, p.start()#只是在操作系统发送一个开启子进程的信号,操作系统要为其开辟一个操作空间,然后父进程初始化子进程,才能运行,时间过度太长,主程序,已经可以运行完了 print('主')

 2.第二中调用方法:

import time

from multiprocessing import Process


class Myprocess(Process):
    def __init__(self,x):
        super().__init__()
        self.name = x

    #调用Process的run方法
    def run(self):
        print('%s is running'%self.name)
        time.sleep(3)
        print('%s is done'%self.name)
    
if __name__ == "__main__":
    p = Myprocess('子进程1')
    #不好的是子进程只能开一个
    p.start() #p.run()
    print('主')