zoukankan      html  css  js  c++  java
  • 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()
    
  • 相关阅读:
    zoj1942Frogger
    阿里云api调用做简单的cmdb
    约瑟夫环
    Bag标签之中的一个行代码实行中文分词实例3
    用lua扩展你的Nginx(整理)
    Single Number III
    TCP/IP ---分层
    TCP/IP --概述
    adb命令学习
    How to set Selenium Python WebDriver default timeout?
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9685402.html
Copyright © 2011-2022 走看看