zoukankan      html  css  js  c++  java
  • 多个子进程的开启

    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()后边
    

      

  • 相关阅读:
    Keepass无法导入密钥文件
    数据库交互方式之一
    Grey encoder and decoder
    SystemVerilog 序列运算符与属性运算符
    避免int 与 pointer的隐式类型转换
    xxx.lib(xxx.obj)fatal error LNK1103: debugging information corrupt; recompile module 的解决方案
    c++ static 关键字用法
    影响中国软件开发的人(摘录)
    链接
    有助于事业发展和幸福感提升的四个约定
  • 原文地址:https://www.cnblogs.com/duanpengpeng/p/9511678.html
Copyright © 2011-2022 走看看