• 子进程


    一.主程序

    from multiprocessing import Process
    import  time,os
    
    # 当你完成的任务需要参数时
    def task(name):
        print(name," running")
        time.sleep(3)
        print(name," stop")
    print(__name__)
    
    # windows 开启子进程 必须放到if中     只要你的开启子进程的代码处于全局 范围 你就应该放到if判断中
    if __name__ == '__main__':
        # 为毛创建进程 为了帮父进程做事情
        # 1.创建一个进程对象 需要传入你要做的任务 就是一个函数对象
        p = Process(target=task,kwargs={"name":"jerry"})
        # 2.启动它
        p.start()
        print(id(p))
        print("我是主程序我的pid:%s 我的父进程是:%s" % (os.getpid(),os.getppid()))
        print("我有一个儿子是 %s" % p.pid)

    二.进程理论

    进程和程序的区别

    程序是什么?

      本质就是一堆代码文件!

      一个程序正在被操作系统读取并执行 就编程进程

    一个程序只能有一个进程码?

      可以 启动一次就产生一个进程 当然可以用代码控制是否允许多进程

    一个程序能有多个进程吗?

      可以 启动一次就产生一个进程 当然可以用代码控制是否允许多进程

    启动进程的方式

      1.系统出事化  会产生一个根进程

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

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

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

    不用操作系统创建进程的方式不同

      unix< centos mac linux

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

      windows

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

    三.父进程和子进程的执行顺序

    from multiprocessing import Process
    import time
    def task(name):
        print("%s start"%name)
        time.sleep(3)
        print("%s stop"%name)
    
    if __name__=='__main__':
        p=Process(target = task,args=("jerry",))
        p.start()
        print("我是主进程!!!")
        time.sleep(100)
        print("我是主进程!!!over")

    肯定是父进程先执行,子进程执行后,父进程后续代码并发

    四.父进程等待

    from multiprocessing import Process
    import time
    def task(i):
        print("%s start"% I )
        time.sleep(2)
        print("%s stop"%i)
    if __name__="__main__":
        start_time = time.time()
        ps=[]
        for i in range(1,3):
            p = Process(target = task,args=(i,))
            p.start()
            ps.append(p)
            # 主进程等待子进程结束
         for p in ps:
            p.join()
        print("主进程!!!!",time.time()-start_time)

    五 .开启子进程的方式

    from multiprocessing import Process
    #方式一
    class MyProcess(Process):
        # 当进程被执行时 其实执行的就是run函数
        def run(self):
            print("这是 run 被执行了!")
    
    #方式二
    def ttt()
        print("111")
    if __name__='__main__':
        mp = MyProcess()
        mp.start()
    
        p = Process(target=ttt)
        p.start()

    六.进程对象的常用属性

    from multiprocessing import  Process
    import  time
    
    
    def task(name):
        print("start",name)
        time.sleep(5)
        print("stop",name)
    
    if __name__='__main__':
        p = Process(target=task,args=("jerry",),name="jerrr process-1")
        p.start()
        #p,join()#让父进程等待子进程结束  让父进程让出了CPU执行权
        print(p.name)
        print(p.pid)# 获取这个进程的ID
        p.terminate() #结束子进程
        print(p.is_alive())# 进程是否还存活
        # p 这个进程的父进程 就是该文件 
        import os 
        print(os.getpid())#当前自己进程的id
        print(os.getppid())#pycharm的进程id

    小结:

      1.多道技术

        空间复用

        时间复用

      2.Python 如何使用多进程

        1.直接创建process对象 同时传入要做的事情就是一个函数

        2.创建一个雷 继承自process把要做的任务放在run方法中

      3.父进程与子进程的执行顺序

      4.常用属性

        start 开启进程

        join 父进程等待子进程

        name 进程名称

        is_alicve是否存活

        terminate终止进程

        pid 获取进程id

  • 相关阅读:
    进程与线程的区别与联系
    c 指针兼容性问题
    柔性数组
    Makefile之wildcard
    shell编程笔记1
    linux下gcc编译的参数详细说明
    的理解
    URL与URI的区别
    Log4J积累
    linux 查看磁盘、文件夹、文件大小(df du)
  • 原文地址:https://www.cnblogs.com/gongcheng-/p/9925628.html
Copyright © 2020-2023  润新知