• 进程的执行顺序


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

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

    启动进程的方式

    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
    """
  • 相关阅读:
    WCF 通讯标准绑定
    FTP FtpWebRequest 异步上传文件
    适用于zTree 、EasyUI tree、EasyUI treegrid
    PropertyInfo 类
    通过类库ChineseChar实现将汉字转化为拼音
    使用内存流导出Excel
    钉钉开发文档示例
    .Net Mail SMTP 发送网络邮件
    C# 解析 Json数据
    Newtonsoft.Json高级用法(转)
  • 原文地址:https://www.cnblogs.com/msj513/p/9925376.html
Copyright © 2020-2023  润新知