zoukankan      html  css  js  c++  java
  • 进程池和线程池

    #开启进程池的方式
    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)
    回调函数
    '''
  • 相关阅读:
    新IO建立的聊天程序
    “万能数据库查询分析器”在四大软件下载网站的排行榜中均入围前10,可喜可贺
    命令行界面的C/S聊天室应用 (Socket多线程实现)
    URL 多线程下载
    DB 查询分析器 6.03 如何灵活、快捷地操作国产达梦数据库
    DB 查询分析器 6.03 在Windows 8 上安装与运行演示
    Maven部署项目到Tomcat
    中文版Maya基础培训教程
    Arduino技术指南
    Photoshop 淘宝店面设计从入门到精通
  • 原文地址:https://www.cnblogs.com/yuexijun/p/11625621.html
Copyright © 2011-2022 走看看