• day 32 管道.数据共享.回调函数与进程池


    一 . 管道

      Pipe   Conn1 ,conn2 = Pipe ( )

    二 . 数据共享

      M = Manager ( )

      Dic = m.dict({'name' : sbalex})

      多个管道会导致数据安全的问题,会使数据丢失,我们就进行加锁Lock

    三 . 回调函数

      callback = call_back_func

      

    import time
    from multiprocessing import Pool,Process

    import os

    def func(n):
    # print('xxxxxxxxxx')
    print('子进程的pid',os.getpid())
    return n*n,'约吗'

    def call_back_func(x):
    # print(x) #(9, '约吗')
    print('call_back',os.getpid())
    print(x[0])

    if __name__ == '__main__':
    pool = Pool(4)
    pool.apply_async(func,args=(3,),callback=call_back_func)

    # print('主进程的pid',os.getpid())
    # pool.close()
    # pool.join()
    # time.sleep(1)

    四 . 进程池(今天的重点)

      Pool 是进程池模块

      Map : 异步提交任务,参数

      

    import time          
    from multiprocessing import Process,Pool

    def func(i):
    num = 0
    for j in range(5):
    num += i

    if __name__ == '__main__':
    pool = Pool(4)
    p_list = []
    start_time = time.time()
    for i in range(100):
    p = Process(target=func,args = (i,))
    p_list.append(p)
    p.start()
    [pp.join() for pp in p_list]
    end_time = time.time()
    print(end_time -start_time)

    s_time = time.time()
    pool.map(func,range(100)) # map自带join+close
    e_time = time.time()
    print(e_time - s_time)
      
      
      

      进程池同步方法,Apply :同步提交任务,直接可以收到返回值

      

    import time
    from multiprocessing import Process,Pool

    def func(i):
    num = 0
    for j in range(5):
    num += i
    time.sleep(1)
    print(num)
    return num

    if __name__ == '__main__':
    pool = Pool(4)

    for i in range(10):
    res = pool.apply(func,args=(i,)) # 同步串行
    # 第一个位置func,第二个位置传参,无敌传参, 任何参数都可以传
    print(res)
      
     

      进程池异步方法,Apply_async()  异步提交任务:res.get()  阻塞效果,Close join
      
      
    import time
    from multiprocessing import Process,Pool

    def func(i):
    num = 0
    for j in range(5):
    num += i
    time.sleep(1)
    # print(">>>",num)
    return num
    if __name__ == '__main__':
    pool = Pool(4)

    red_list = []
    for i in range(10):
    res = pool.apply_async(func,args=(i,))
    # print(res)
    red_list.append(res)
    # print(res.get())

    pool.close() # 不是关闭进程池,只是锁定
    pool.join() #等待进程池中所有任务执行完,但是无法确认是否所有的任务真的全部执行完了,前面要加close方法
    for resss in red_list:
    print(resss.get())
     
  • 相关阅读:
    19. 星际争霸之php设计模式--迭代器模式
    18. 星际争霸之php设计模式--观察者模式
    17. 星际争霸之php设计模式--职责链模式
    16. 星际争霸之php设计模式--组合模式
    15. 星际争霸之php设计模式--策略模式
    14. 星际争霸之php设计模式--状态模式
    13. 星际争霸之php设计模式--正面模式
    12. 星际争霸之php设计模式--模板模式
    11. 星际争霸之php设计模式--备忘模式
    10. 星际争霸之php设计模式--原型模式
  • 原文地址:https://www.cnblogs.com/liuteacher/p/10038638.html
Copyright © 2020-2023  润新知