• Python并发编程-进程的几个方法


    join()方法

    
    from multiprocessing import Process
    import time
    def func(arg1,arg2):
        print('*'*arg1)
        time.sleep(5)
        print('*'*arg2)
    
    if __name__ == '__main__': #windos必须声明
        p = Process(target=func, args=(10,20))
        p.start()
        print('hahaha')
        #需求,要求子进程结束后立即执行主进程
        p.join()#join()方法用于感知一个子进程的结束,类似将异步的程序改为同步
        print('========:运行完了')
    
    >>>>
    hahaha
    **********
    ********************
    ========:运行完了
    

    控制多个子进程, 保证所有子进程结束才执行下面的逻辑

    from multiprocessing import Process
    import time
    def func(arg1,arg2):
        print('*'*arg1)
        time.sleep(5)
        print('*'*arg2)
    
    if __name__ == '__main__': #windos必须声明
        p_lst = []
        for i in range(10):
            p = Process(target=func, args=(10*i,20*i))
            p_lst.append(p)
            p.start() #子进程还是异步执行
        [p.join() for p in p_lst]#join()每个子进程,保证所有的子进程都结束了才执行下面这句
        print('运行完了')
    

    异步写入多个文件

    import os
    from multiprocessing import  Process
    
    def func(filename, content):
        with open(filename,'w') as f:
            f.write(content*10*'*')
    
    if __name__ == '__main__':
        p_lst = []
        for i in range(5):
            p = Process(target=func, args=('info%s'%i,i))
            p_lst.append(p)
            p.start()
        [p.join() for p in p_lst]
        print([i for i in os.walk(r'C:Demo')])
    

    开启子进程的第二种方法

    from multiprocessing import  Process
    import os
    
    class MyProcess(Process): #继承Process,实现一个自定义类
        def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
            print('子进程',os.getpid())
    
    if __name__ == '__main__':
        print('主进程:', os.getpid())
        p1 = MyProcess()
        p1.start()
        p2 = MyProcess()
        p2.start()
    
    

    开启子进程第二种方法-参数的传递

    from multiprocessing import  Process
    import os
    
    class MyProcess(Process): #继承Process,实现一个自定义类
        def __init__(self,arg1, arg2): #接收参数
            super().__init__()#process本身也有__init__,这里需要继承
            self.arg1 = arg1
            self.arg2 = arg2
    
        def run(self): #必须实现一个run方法, run方法必须是在子进程中执行的代码
            print('子进程',os.getpid())
            print(self.arg1)
            print(self.arg2)
    
    if __name__ == '__main__':
        print('主进程:', os.getpid())
        p1 = MyProcess(1,2) #传递参数
        p1.start()
        p2 = MyProcess(3,4)
        p2.start()
    
  • 相关阅读:
    《Effective C#》读书笔记——了解.NET内存管理机制<.NET资源管理>
    《Effective C#》读书笔记——条目13:正确地初始化静态成员变量<.NET资源管理>
    用创新和务实的精神开创反洗钱检查工作的新局面
    《谈谈具有中国特色的“全能型”程序员》(2009/12/11)
    EOM与程序员话题的开场白(2009/12/07)
    从事反洗钱工作要有一定的高度
    程序员漫谈(2009/12/08)
    怎样快速确定程序员编程的水平(2009/12/10)
    重视或应付!当前金融机构反洗钱面临的一个问题
    反洗钱法律法规
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9685402.html
Copyright © 2020-2023  润新知