• 多个子进程的开启


    from multiprocessing import Process
    import time
    import random
    
    def func(i):
        print('我是%s'%i)
    
    
    if __name__ == '__main__':
        l = []
        addr = ['河南的','山东的','辽宁的','湖南的']
        for i in addr:
            p = Process(target=func,args=(i,))
            p.start()
            l.append(p)
        [p.join() for p in l]
        # time.sleep(1)
        print('我选%s'%(random.choice(addr)))
    

      多进程的其他常用方法

    from multiprocessing import Process
    import time
    import os
    ###########################################开启子进程的一种方式
    def func(i):
        time.sleep(1)
        print('这里是儿子进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(os.getpid(),os.getppid()))
    
    # os.getpid()获取的是当前进程自己的pid
    # os.getppid()获取的是当前进程的父进程的pid
    if __name__ == '__main__':
        p = Process(target=func,args=(1,))# 实例化一个进程对象
        p.start()# 开启一个子进程
        print('这里是父亲进程,父进程自己的pid是:%s,父亲的父亲的pid是%s'%(os.getpid(),os.getppid()))
    
    ######################################## 开启子进程的另外一种方式,以继承的方式
    
    class MyProcess(Process):
        def __init__(self):
            super(MyProcess, self).__init__()
        def run(self):
            print('这是以继承类的方式开启的子进程')
    
    if __name__ == '__main__':
        p1 = MyProcess()
        p1.start()# 是指,解释器告诉操作系统,去帮我开启一个进程,   就绪状态
        # p1.run()# 告诉操作系统,现在马上帮我执行这个子进程           执行
    
    
    class MyProcess(Process):
        def __init__(self):
            super(MyProcess, self).__init__()#  执行父类的__init__方法
            # self.name = name
    
        def run(self):
            print('这是以继承类的方式开启的子进程,他的名字是%s'%self.name)
    
    if __name__ == '__main__':
        p1 = MyProcess()
        p1.start()# 是指,解释器告诉操作系统,去帮我开启一个进程,   就绪状态
        p1.run()# 告诉操作系统,现在马上帮我执行这个子进程           执行
    
    
    
    
    
    ################################################如何开启多个不同的子进程
    
    def func(i):
        time.sleep(1)
        print('这里是儿子%s进程,儿子自己的pid是%s,儿子的父进程的pid是%s'%(i,os.getpid(),os.getppid()))
    
    # os.getpid()获取的是当前进程自己的pid
    # os.getppid()获取的是当前进程的父进程的pid
    if __name__ == '__main__':
        for i in range(2):
            p = Process(target=func,args=(i,))# 实例化一个进程对象
            p.start()# 开启一个子进程
        print('这里是父亲进程,父进程自己的pid是:%s,父亲的父亲的pid是%s'%(os.getpid(),os.getppid()))
    

      守护进程

    from multiprocessing import Process
    import time
    
    def func():
        time.sleep(100)
        print('这里是儿子哦')
    
    if __name__ == '__main__':
        p = Process(target=func)
        p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置
        p.start()
        time.sleep(1)
        print('这是爸爸')
    总结一下:
        守护进程:跟随着父进程的代码执行结束,守护进程就结束
    
    ###########################################守护进程的特点
    
    from multiprocessing import Process
    import time
    
    def func1():
        print('这里是孙子')
    
    def func():
        p = Process(target=func1)
        p.start()
        time.sleep(5)
        print('这里是儿子哦')
    
    if __name__ == '__main__':
        p = Process(target=func)
        p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置
        p.start()
        time.sleep(1)
        print('这是爸爸')
        守护进程:不允许开启子进程
    
    #######################################  守护进程的用法
    from multiprocessing import Process
    import time
    
    
    def func():
        for i in range(10):
            time.sleep(1)
            print(time.strftime('%H:%M:%S'))
    
    if __name__ == '__main__':
        p = Process(target=func)
        p.daemon = True # 将p进程设置为守护进程,必须要在start之前设置
        p.start()
        time.sleep(5)
        print('这是爸爸')
    

      

    from multiprocessing import Process
    import time
    
    def func():
        for i in range(500):
            time.sleep(0.01)
            print('儿子在这里')
    
    if __name__ == '__main__':
        p = Process(target=func)
        p.start()
        p.join()# 是让主进程等待子进程执行完。  现象:主进程执行到这句话,主进程阻塞住,等待子进程执行
        # time.sleep(1)
        for i in range(100):
            time.sleep(0.01)
            print('爸爸在这里')
    
    # 开启一个正常的子进程,父进程会等待子进程结束后,父进程也就是程序才结束
    # p.join()# 是让主进程等待子进程执行完。  现象:主进程执行到这句话,主进程阻塞住,等待子进程执行
    # 如何把父进程和子进程之间的关系变为同步或者异步?
    # 父进程执行join,就会变成同步,不执行join,父进程和子进程就是异步的关系
    # join必须放在start()后边
    

      

  • 相关阅读:
    Websocket --socket.io的用法
    Vuex中mapState的用法
    vue中关于computed的一点理解
    webuploader大文件分片,多线程总结
    pdf的使用遇到的问题
    单文件WebUploader做大文件的分块和断点续传
    webUploader大文件断点续传学习心得 多文件
    iframe子页面与父页面元素的访问以及js变量的访问
    pwa 集合
    mpvue 转小程序实践总结
  • 原文地址:https://www.cnblogs.com/duanpengpeng/p/9511678.html
Copyright © 2020-2023  润新知