进程的执行顺序

程序是什么?进程是什么?

本质上就是一堆代码文件,一个程序正在被操作系统读取并执行,就会变成了进程

启动进程的方式

1.系统初始化,会产生一个跟进程

2.用户的交互请求 鼠标双击某个程序

3.在一个进程发起系统调用启动另一个程序*****

4.在批处理作业开始在某些专用计算可能被使用

不同系统创建进程的方式不同

unix 《centos MAC linux》

完全拷贝父进程的所有数据,子进程可以访问父进程的数据?不可以。但是可以访问拷贝过来数据副本

windows

创建子进程,加载父进程中所有可执行的文件。

实现子进程的方式

from multiprocessing import Process
#创建子进程的对象的方法
import time,os
def task(name):#子进程运行的是函数
    print(name,"running")
    time.sleep(2)
    print(name,"stop")


if __name__ == '__main__':
    #创建一个子进程对象,target = 传入指定运行函数,args = kwargs = 是将函数需要的参数如何传给函数
    p = Process(target=task,args=("msj",))
    p.start()#启动子进程(这是就有操作系统来分配计算资源)
    print("父进程/当前程序进程编号",os.getpid())#获得当前执行文件的进程id
    print("是什么调用当前程序", os.getpid())#获得当前执行文件的父进程id
    print("子进程编号",p.pid)#查看子进程的id

主进程与子进程的执行顺序

一旦启动子进程,后续代码就会并发,没有先后顺序

也可以使用.join()等待子进程结束才能开始

from multiprocessing import Process
import time

def task(i):
    print(i,"start")
    time.sleep(i)
    print(i, "end")


if __name__ == '__main__':
    start_time = time.time()
    for i in range(1,4):
        p = Process(target=task,args=(i,))
        p.start()
    print("主进程")
    print("运行时间",time.time()-start_time)#这是子进程与父进程在操作系统处理优先级相同,随意随机执行。
    #同时子进程存在阻塞,所以父进程会先执行,同时根据相聚时间太紧,所以根据阻塞时间输出

“”“
主进程
运行时间 0.059999942779541016
1 start
2 start
3 start
1 end
2 end
3 end
”“”

join的使用

from multiprocessing import Process
import time

def task(i):
    print(i,"start")
    time.sleep(i)
    print(i, "end")


if __name__ == '__main__':
    start_time = time.time()
    for i in range(1,4):
        p = Process(target=task,args=(i,))
        p.start()
        #join()函数就是等待子进程的,无参等到结束,有参int表示等待秒数
        p.join()#,这样相当于父进程需要等待每一个子进程(1+2+3+其他代码执行的时间)6.623085975646973
    print("主进程")
    print("运行时间",time.time()-start_time)

减少join的等待时间

from multiprocessing import Process
import time

def task(i):
    print(i,"start")
    time.sleep(i)
    print(i, "end")


if __name__ == '__main__':
    start_time = time.time()
    ps = []
    for i in range(1,4):
        p = Process(target=task,args=(i,))
        ps.append(p)
        p.start()
    for p in ps:
        p.join()#同时并发等待,所以只需要最长时间(3+)
    print("主进程")
    print("运行时间",time.time()-start_time)

"""
2 start
1 start
3 start
1 end
2 end
3 end
主进程
运行时间 3.3100392818450928
"""
原文地址:https://www.cnblogs.com/msj513/p/9925376.html