zoukankan      html  css  js  c++  java
  • python——进程池

    from concurrent.futures import ProcessPoolExecutor
    import os,random
    def func(name):
        print("%s吃了又一碗饭:%s" %(name,os.getpid()))
        time.sleep(random.randint(1, 3))
    
    if __name__ == "__main__":
        p = ProcessPoolExecutor(3)  #创建一个进程池,里面容纳3个进程
        for i in range(7):
            obj = p.submit(func,'科比%i'%i)
        print("主进程")
    
    #执行结果
    主进程
    科比0吃了又一碗饭:14860
    科比1吃了又一碗饭:4872
    科比2吃了又一碗饭:15088

    科比3吃了又一碗饭:14860 科比4吃了又一碗饭:14860 科比5吃了又一碗饭:14860 科比6吃了又一碗饭:4872

    再看下一个例子:

    from concurrent.futures import ProcessPoolExecutor
    import os,random
    def func(name):
        print("%s吃了又一碗饭:%s" %(name,os.getpid()))
        time.sleep(random.randint(1, 3))
    
    if __name__ == "__main__":
        p = ProcessPoolExecutor(3)  #创建一个进程池,里面容纳3个进程
        for i in range(7):
            obj = p.submit(func,'科比%i'%i)
        p.shutdown(wait=True)  #类似与join,并且可以关门,以防在等的过程中又提交新的任务
        print("主进程")
    
    #执行结果
    科比0吃了又一碗饭:13980
    科比1吃了又一碗饭:9636
    科比2吃了又一碗饭:12660
    科比3吃了又一碗饭:13980
    科比4吃了又一碗饭:12660
    科比5吃了又一碗饭:9636
    科比6吃了又一碗饭:13980
    主进程

    同步:执行之后等着结果

    from multiprocessing import Process
    import
    time,os,random def func(name,hour): print("A lifelong friend:%s,%s"% (name,os.getpid())) time.sleep(hour) print("Good bother:%s"%name) start = time.time() if __name__ == "__main__": p = Process(target=func,args=('kebi',2)) p1 = Process(target=func,args=('maoxian',1)) p2 = Process(target=func,args=('xiaoniao',3)) p_1 = [p,p1,p2] for i in p_1: i.start() #提交之后原地等着,这就是串行 i.join()
    print("this is over") print(time.time() - start) #打印结果 A lifelong friend:kebi,13016 Good bother:kebi A lifelong friend:maoxian,9124 Good bother:maoxian A lifelong friend:xiaoniao,1552 Good bother:xiaoniao this is over 6.487138032913208 #一个一个执行

    串行是我们要避免的,这回浪费系统资源。

    同步不代表串行,同步只是提交任务的方式。

    from concurrent.futures import ProcessPoolExecutor
    import os,random,time
    def func(name,i):
        print("%s吃了又一碗饭:%s" %(name,os.getpid()))
        time.sleep(random.randint(1,3))
        return i**2
    obj_s = []
    if __name__ == "__main__":
        p = ProcessPoolExecutor(3)  #创建一个进程池,里面容纳3个进程
        for i in range(7):
            obj = p.submit(func,'科比%i'%i,i)
            obj_s.append(obj)
        for m in obj_s:
            print(m.result())
    
    #执行结果
    科比0吃了又一碗饭:3972
    科比1吃了又一碗饭:12232
    科比2吃了又一碗饭:204
    科比3吃了又一碗饭:12232
    科比4吃了又一碗饭:204
    科比5吃了又一碗饭:3972   #先执行,最后取结果结果
    0
    1
    4
    科比6吃了又一碗饭:204
    9
    16
    25
    36

    如果就像执行完了之后再打印结果

    from concurrent.futures import ProcessPoolExecutor
    import os,random,time
    start = time.time()
    def func(name,i):
        print("%s吃了又一碗饭:%s" %(name,os.getpid()))
        time.sleep(random.randint(1,3))
        return i**2
    obj_s = []
    if __name__ == "__main__":
        p = ProcessPoolExecutor(3)  #创建一个进程池,里面容纳3个进程
        for i in range(7):
            obj = p.submit(func,'科比%i'%i,i)
            obj_s.append(obj)
        p.shutdown()
        for m in obj_s:
            print(m.result())
    
    #执行结果
    科比0吃了又一碗饭:16320
    科比1吃了又一碗饭:12048
    科比2吃了又一碗饭:1152
    科比3吃了又一碗饭:16320
    科比4吃了又一碗饭:12048
    科比5吃了又一碗饭:1152
    科比6吃了又一碗饭:16320
    0
    1
    4
    9
    16
    25
    36
  • 相关阅读:
    正则表达式--hdu2206ip匹配
    win7查看隐藏分区
    我购买byd的几点逻辑
    html5笔记
    机器学习
    Popular Cows
    武大OJ 574. K-th smallest
    武大OJ 622. Symmetrical
    [HAOI2011]防线修建
    1185: [HNOI2007]最小矩形覆盖
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7931564.html
Copyright © 2011-2022 走看看