zoukankan      html  css  js  c++  java
  • 进程之管道Pipe,数据共享Manager,进程池Poo

    #管道Pipe
    from multiprocessing import Process,Pipe
    
    #1
    def func1(conn2):
        msg=conn2.recv()
        print('conn2:',msg)
    
    if __name__ == '__main__':
        conn1,conn2=Pipe()
        p=Process(target=func1,args=(conn2,))
        p.start()
        conn1.send('你好')
    
    
    #2
    def func1(conn1,conn2):
        conn1.close()
        while 1:
            try:
                msg=conn2.recv()
                print('conn2',msg)
            except EOFError:
               break
    if __name__ == '__main__':
        conn1,conn2=Pipe()
        p=Process(target=func1,args=(conn1,conn2))
        p.start()
        conn2.close()
        conn1.send('你好')
        conn1.close()
    
    #数据共享 Manager
    from multiprocessing import Process,Manager,Lock
    
    
    #1
    def func1(m_dic):
        m_dic['name']='刘伟'
        print('子进程结束')
    
    if __name__ == '__main__':
        m=Manager()
        m_dic=m.dict({'name':'伟'})
        p=Process(target=func1,args=(m_dic,))
        p.start()
        print('主进程 :',m_dic)
        p.join()
        print('主进程 :', m_dic)
    
    #2
    def func1(m_dic,lock):
        with lock:#加锁
            m_dic['count']-=1
    
    if __name__ == '__main__':
        lock=Lock()
        m_dic=Manager().dict({'count':100})
        lst=[]
        for i in range(20):
            p=Process(target=func1,args=(m_dic,lock))
            p.start()
            lst.append(p)
        [el.join() for el in lst]
        print('主进程m_dic:',m_dic)
    
    #进程池
    import time,os
    from  multiprocessing import Process,Pool
    #1
    def func1(n):
        time.sleep(1)
        print(n)
    if __name__ == '__main__':
        pool=Pool(4)
        pool.map(func1,range(100))
    
    
    
    #2进程池与多进程运行时间对比
    def func(n):
        print(n)
    if __name__ == '__main__':
        pool=Pool(4)
        pool_s=time.time()
        pool.map(func,range(100))#map异步执行的方法
        pool_e=time.time()
        pool_dif=pool_e-pool_s
    
        p_lst=[]
        p_s=time.time()
        for i in range(100):
            p1=Process(target=func,args=(i,))
            p1.start()
            p_lst.append(p1)
        [p.join() for p in p_lst]
        p_e=time.time()
        p_dif=p_e-p_s
        print('进程池时间:', pool_dif)
        print('多进程时间:',p_dif)
    
    
    #3apply同步执行的方法
    def func(i):
        time.sleep(0.5)
        return i**2
    if __name__ == '__main__':
        pool=Pool(4)
        for  i in range(10):
            ret=pool.apply(func,args=(i,))
            print(ret)
    
    
    #4apply_async异步执行的方法
    def func(i):
        time.sleep(2)
        print(os.getpid())
        return i**2
    if __name__ == '__main__':
        pool=Pool(4)
        lst=[]
        for  i in range(10):
            ret=pool.apply_async(func,args=(i,))
            lst.append(ret)
        pool.close()#让进程池不再接受别的任务
        pool.join()#等待进程池进程全部执行完
        for i in lst:
            print('结果:',i.get())#get取不到会阻塞变为同步,所以用列表先放对象,在循环列表,元素点get取值
    
    
    #5 pool.close(),pool.join()
    def func(i):
        time.sleep(2)
        print(i)
        return i**2
    if __name__ == '__main__':
        pool=Pool(4)
        for  i in range(10):
            ret=pool.apply_async(func,args=(i,))
        pool.close()#不允许别的任务在使用进程池,不是关闭进程池
        pool.join()#感知进程池中任务的方法
        print('主进程结束')
    
    #6回调callback
    def func1(i):
        print('func_id:',os.getpid())
        return i**2
    def func2(m):
        print("func2_id:",os.getpid())
        print('func2>>>>',m)
        # return m**2
    
    if __name__ == '__main__':
        pool=Pool(4)
        ret=pool.apply_async(func1,args=(10,),callback=func2)
        print('ret:',ret.get())
        pool.close()
        pool.join()
        print('主进程id:',os.getpid())
    

      

  • 相关阅读:
    JQuery中的事件与动画
    JQuery选择器
    初识JQuery
    JavaScript对象及初识面向对象
    JavaScript操作DOM对象
    JavaScript操作BOM对象
    JavaScript基础
    文件管理2
    文件管理
    创建线程
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9851328.html
Copyright © 2011-2022 走看看