• 进程池和线程池


    #开启进程池的方式
    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    import os,time,random
    def task(name):
    print('name:%s pid:%s'%(name, os.getppid()))
    time.sleep(random.randint(1,3))
    if __name__ == '__main__':
    pool = ProcessPoolExecutor(4)
    for i in range(10):
    pool.submit(task, 'egin%s'%i)
    pool.shutdown(wait = True)
    print('主')
    '''shutdown相当于一个开关,它会读取程序中所设定的进程总数,直至每开启一个进程,它读取设定的总数就会减一,直至为0时便会打印主线程'''


    # 开启线程池的方式
    from threading import currentThread
    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
    import time, os, random
    def task():
    print('name:%s,pid:%s'%(currentThread().getName(), os.getpid()))
    time.sleep(random.randint(1,3))
    if __name__ == '__main__':
    tool = ThreadPoolExecutor(5)
    for i in range(10):
    tool.submit(task)
    tool.shutdown(wait = True)
    print('主')
    '''shutdown相当于一个开关,它会读取程序中所设定的进程总数,直至每开启一个进程,它读取设定的总数就会减一,直至为0时便会打印主线程'''

    '''一 进程池与线程池

    在刚开始学多进程或多线程时,我们迫不及待地基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是:服务的开启的进程数或线程数都会随着并发的客户端数目地增多而增多,这会对服务端主机带来巨大的压力,甚至于不堪重负而瘫痪,于是我们必须对服务端开启的进程数或线程数加以控制,让机器在一个自己可以承受的范围内运行,这就是进程池或线程池的用途,例如进程池,就是用来存放进程的池子,本质还是基于多进程,只不过是对开启进程的数目加上了限制

    介绍

    官网:https://docs.python.org/dev/library/concurrent.futures.html

    concurrent.futures模块提供了高度封装的异步调用接口
    ThreadPoolExecutor:线程池,提供异步调用
    ProcessPoolExecutor: 进程池,提供异步调用
    Both implement the same interface, which is defined by the abstract Executor class.

    基本方法

    1、submit(fn, *args, **kwargs)
    异步提交任务

    2、map(func, *iterables, timeout=None, chunksize=1)
    取代for循环submit的操作

    3、shutdown(wait=True)
    相当于进程池的pool.close()+pool.join()操作
    wait=True,等待池内所有任务执行完毕回收完资源后才继续
    wait=False,立即返回,并不会等待池内的任务执行完毕
    但不管wait参数为何值,整个程序都会等到所有任务执行完毕
    submit和map必须在shutdown之前

    4、result(timeout=None)
    取得结果

    5、add_done_callback(fn)
    回调函数
    '''
  • 相关阅读:
    digits
    Graph
    noip2013货车运输
    noip2013华容道
    codevs科技庄园
    POJ3321 Apple tree
    第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--F-等式
    第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--E-回旋星空
    第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--D-psd面试
    第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--A-跳台阶
  • 原文地址:https://www.cnblogs.com/yuexijun/p/11625621.html
Copyright © 2020-2023  润新知