9.7 池

为什么要有池:

  • 预先的开启固定个数的进程数,当任务来临的时候,直接提交给已经开好的进程

  • 这些已经开好的进程直接去执行程序

  • 节省了进程、线程开启、关闭、切换的时间

  • 并且减轻了操作系统的调度负担

9.7.1 进程池

import os import timeimport randomfrom concurrent.futures import ProcessPoolExecutor​df func():    print('start',os.gitpid())    time.sleep(random.random())    print('edf',os.getpid())

if __name__ == '__main__':    p = ProcessPollExcutor(5)    for i in range(10):        p.submit()    p.shutdown() #关闭池之后就不能继续提交任务,并且会阻塞,直到已经提交的任务完成    print('main',os.getpid())

任务参数+返回值

from concurrent.futures import ProcessPoolExecutordef func(i,name):    print('start',os.getpid())    time.sleep(random.randint(1,3))    print('end', os.getpid())    return '%s * %s'%(i,os.getpid())​if __name__ =='__main__':    p = ProcessPoolExcutor(5)    ret_l = []    for i in range(10):        ret = p.submit(func,i,'liujia')        ret_l.append(ret)    for ret in ret_l:        print('ret---->',ret.result())#ret.result()同步阻塞    print('main',os.getpid())

9.7.2 线程池

from concurrent.futures import ThreadPoolExecutordef func(i):    print('start', os.getpid())    time.sleep(random.randint(1,3))    print('end', os.getpid())    return '%s * %s'%(i,os.getpid())tp = ThreadPoolExecutor(20)ret_l = []for i in range(10):    ret = tp.submit(func,i)    ret_l.append(ret)tp.shutdown()print('main')for ret in ret_l:    print('------>',ret.result())

利用map简化

from concurrent.futures import ThreadPoolExecutordef func(i):    print('start', os.getpid())    time.sleep(random.randint(1,3))    print('end', os.getpid())    return '%s * %s'%(i,os.getpid())tp = ThreadPoolExecutor(20)ret = tp.map(func,range(20))  #0-20都去执行func函数for i in ret:    #生成每一个任务的返回值    print(i)ret_l = []for i in range(10):    ret = tp.submit(func,i)    ret_l.append(ret)tp.shutdown()print('main')

回调函数

import requestsfrom concurrent.cutures import ThreadPoolExecutordef get_page(url):    res = requests.get(url)    return {'url':url,'content':res.txt}​def paeserpage(ret): #ret其实就是get_page函数的返回值    dic = ret.result()    print(dic['url'])

tp = ThreadPoolExecutor(5):url_list = ['http://www.baidu.com',   # 3    'http://www.cnblogs.com', # 1    'http://www.douban.com',  # 1    'http://www.tencent.com',    'http://www.cnblogs.com/Eva-J/articles/8306047.html',    'http://www.cnblogs.com/Eva-J/articles/7206498.html',]​ret = []  #中转站for url in url_list:    ret = tp.submit(get_page,url)    ret_l.append(ret)    ret.add_done_callback(parserpage) #哪一个线程先回来就先执行

转载于:https://www.cnblogs.com/doraemon548542/p/11436666.html

doraemon的python 池相关推荐

  1. doraemon的python 从计算机基础到面向对象的笔记(加面试题)

    # python学习笔记## 第一章 计算机基础### 1.1 硬件 计算机基本的硬件:CPU/内存/主板/硬盘/网卡/显卡,硬件与硬件之间需要系统来统一协调工作### 1.2 操作系统 操作系统是用 ...

  2. doraemon的python CBV和FBV、视图装饰器

    ### 11.7 FBV和CBV#### 11.7.1 CBV的使用 FBC: function based viewCBV:class based view定义CBV:```python from ...

  3. doraemon的python 模块

    第六章 模块 6.1 模块 内置模块,python内部提供过的功能 import sys 第三方模块,下载/安装/使用 #吧pip.exe 所在的目录添加到环境变量中pip install 安装的模块 ...

  4. doraemon的python 集合

    day06 数据类型 集合 今日内容 集合 内存相关 深浅拷贝 内容回顾和补充 内容回顾 补充 l列表 reverse 反转 v1 = [12,2,3,4,2,4]v1.reverse()print( ...

  5. doraemon的python 列表

    1.列表 公共功能: len 索引 切片 步长 for循环 练习题# content = input("请输入内容:")# content = content.split(&quo ...

  6. doraemon的python 协程

    ### 9.8 协程 进程.线程.协程三者的区别:- 进程:是资源分配最小的单位 - 线程:是CPU执行的最小单位 - 协程:用户级别的,由我们自己写的python代码来控制切换的,操作系统不可见协程 ...

  7. doraemon的python 线程详解

    ### 9.3 线程(开销小)- 线程是进程中的一部分,每一个进程至少有一个线程 - 进程是计算机最小的资源分配单位(进程是负责圈资源) - 线程是计算机中能被CPU调度最小单位(线程是负责执行具体代 ...

  8. doraemon的python 守护进程和Process

    ### 9.4 Process模块 进程 ```python from multiprocess import Process p = Process(target=函数名,args=(参数1,))1 ...

  9. doraemon的python js入门必了解之一

    ### 11.8 js#### 11.8.1 js的引入方式 ```html <script type="text/javascript" src="js/inde ...

最新文章

  1. 微信公众平台开发,自定义菜单,群发消息,网页授权(3)
  2. Iterator迭代器
  3. Python可视化中Matplotlib(4.三种设置样式方法、设置坐标刻度以及标签、设置显示出特殊字符)
  4. 百度历年笔试面试150题
  5. 场景切换时清理缓存!!CCTextureCache、CCSpriteFrameCache、CCAnimationCache
  6. Linux文件系统的目录结构详解
  7. Uncaught ReferenceError: jie is not defined
  8. Java异常处理-----finally
  9. 华南理工计算机电路基础试题,华南理工大学计算机电路基础
  10. 奇东锐腾服务器无法显示,奇东锐腾pxe全自动网刻工具
  11. 软件工程-软件测试和系统运维
  12. 从零开始学JSON(修订版)
  13. Fabric CA的部署与使用
  14. 十七、DPM模型参数设置详解
  15. 几种常用数据库的区别
  16. JSON与csv哪一个更自描述_徒步进藏和骑行进藏旅行,哪一个更辛苦
  17. CDH-TXKT-集群的维护
  18. nginx 404及5xx页面配置
  19. HDU 2047 阿牛的EOF牛肉串的java实现思路
  20. .net高级技术(class0515)

热门文章

  1. 做网络必须掌握的83句话[转载]
  2. 2017 寒假练习题 Part 1
  3. 华为云数据库公网ip_企业数据上云必有一战,华为云12.12云数据库2折起
  4. Java基础之——动态代理
  5. 问题 H: 口袋的天空(Kruscal)
  6. 朴素贝叶斯分类算法--终极奥义
  7. K3s Load Balancer(Rancher LB)
  8. HTML基础,CSS基础
  9. 行云管家堡垒机如何登录服务器 1
  10. Mac 下Charles的安装和抓包