from concurrent.futures import ThreadPoolExecutor, as_completed, wait, FIRST_COMPLETED
from concurrent.futures import Future
from multiprocessing import Pool#未来对象,task的返回容器#线程池, 为什么要线程池
#主线程中可以获取某一个线程的状态或者某一个任务的状态,以及返回值
#当一个线程完成的时候我们主线程能立即知道
#futures可以让多线程和多进程编码接口一致
import timedef get_html(times):time.sleep(times)print("get page {} success".format(times))return timesexecutor = ThreadPoolExecutor(max_workers=2)
#通过submit函数提交执行的函数到线程池中, submit 是立即返回
# task1 = executor.submit(get_html, (3))
# task2 = executor.submit(get_html, (2))#要获取已经成功的task的返回
urls = [3,2,4]
all_task = [executor.submit(get_html, (url)) for url in urls]
wait(all_task, return_when=FIRST_COMPLETED)
print("main")# for future in as_completed(all_task): #谁先完成,谁先打印
#     data = future.result()
#     print("get {} page".format(data))#通过executor的map获取已经完成的task的值,顺序
# for data in executor.map(get_html, urls):
#     print("get {} page".format(data))# #done方法用于判定某个任务是否完成
# print(task1.done())
# print(task2.cancel())
# time.sleep(3)
# print(task1.done())
#
# #result方法可以获取task的执行结果
# print(task1.result())

多进程

import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor
#多进程编程
#耗cpu的操作,用多进程编程, 对于io操作来说, 使用多线程编程,进程切换代价要高于线程#1. 对于耗费cpu的操作,多进程由于多线程
# def fib(n):
#     if n<=2:
#         return 1
#     return fib(n-1)+fib(n-2)
#
# if __name__ == "__main__":
#     with ThreadPoolExecutor(3) as executor:
#         all_task = [executor.submit(fib, (num)) for num in range(25,40)]
#         start_time = time.time()
#         for future in as_completed(all_task):
#             data = future.result()
#             print("exe result: {}".format(data))
#
#         print("last time is: {}".format(time.time()-start_time))#2. 对于io操作来说,多线程优于多进程
def random_sleep(n):time.sleep(n)return nif __name__ == "__main__":with ProcessPoolExecutor(3) as executor:all_task = [executor.submit(random_sleep, (num)) for num in [2]*30]start_time = time.time()for future in as_completed(all_task):data = future.result()print("exe result: {}".format(data))print("last time is: {}".format(time.time()-start_time))

转载于:https://www.cnblogs.com/Erick-L/p/8919913.html

concurrent.futures 使用及解析相关推荐

  1. python线程池模块_python并发编程之进程池,线程池,协程(Python标准模块--concurrent.futures(并发未来))...

    需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...

  2. concurrent.futures模块使用

    一.概念总结 1-1 池:控制进程数或线程数的概念. 服务器开启的进程数或线程数,会随并发的客户端数目单调递增.会产生巨大的压力于服务器,于是使用"池"的概念,对服务端开启的进程数 ...

  3. concurrent.futures 并发爬取 wos 的部分专利号和施引专利

    工作上需要爬取 wos 的一些专利号和施引专利,做成了一个 excel 表格.施引专利在系统默认的导出里是没有的. 第一次实际运用了concurrent.futures 来处理并发下载,确实很简单.一 ...

  4. concurrent.futures模块(进程池线程池)

    1.线程池的概念 由于python中的GIL导致每个进程一次只能运行一个线程,在I/O密集型的操作中可以开启多线程,但是在使用多线程处理任务时候,不是线程越多越好,因为在线程切换的时候,需要切换上下文 ...

  5. python 并行计算 并行方法总结 concurrent.futures pp pathos multiprocessing multiprocess模块 总结对比

    目录 模块介绍文章 相近模块 1.按并行分类 (1)阻塞(非并行) (2)批次并行 (3)异步 2.按传参分类 (1)单个任务,任务多参数 (2)多个任务,任务单参数 (3)多个任务,任务多参数 3. ...

  6. concurrent.futures dataset

    经过测试,没有发现比多线程块 import datetime import os import threading from concurrent.futures import ThreadPoolE ...

  7. python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块

    一.关于concurrent.futures模块 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/ ...

  8. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...

  9. python并发之concurrent.futures

    concurrent:并发 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码.从Python3.2开始,标准库为我们提供了concurr ...

最新文章

  1. 怎样解决MySQL数据库主从复制延迟的问题
  2. Bochs安装FreeDOS与调试
  3. 【小项目关键技术五】控制全彩 WS2812 灯环/灯带
  4. PyTorch框架学习七——自定义transforms方法
  5. 还在用 AI 和机器学习?简单的 SQL 脚本就能替代!
  6. r语言 四格画图_R绘图基础(一)
  7. 《Python核心编程》第二版第八章练习题答案 第三部分
  8. c语言杭电oj1090答案,杭电OJ水题答案.doc
  9. vue百度地图加载离线瓦片(包含百度离线文件+瓦片下载器)
  10. 利用java中的Calendar类完成当前月份日历Calendar类小练习
  11. Android home和back事件处理
  12. springboot实现统一日志管理
  13. 5行代码提升时间序列预测,都有用!
  14. 为什么要设置HashMap的初始化容量
  15. 深入理解原生js拖放(draggable)
  16. 最新!2020中国高校毕业生薪资排行出炉!
  17. 计算机网络怎么运行内存,电脑运行内存怎么扩大(教你使用虚拟内存来增加win7系统的运行内存)...
  18. Unity中国象棋(一)——初始化棋子
  19. 证明完全立方数模9同余_牡丹江2立方玻璃钢蓄水池报价
  20. JAVA计算机毕业设计在线玩具租赁系统Mybatis+源码+数据库+lw文档+系统+调试部署

热门文章

  1. Nagios监控HP硬件状态
  2. 实录:VCS双机使用DiskReservation资源导致多路径失效
  3. linux netperf的安装
  4. 使用as3crypto在Flex中实现AES加密
  5. ASP.NET Web API 异常日志记录
  6. PHP清除HTML代码、空格、回车换行符的函数
  7. SQL Server 环形缓冲区(Ring Buffer) -- 环形缓冲在AlwaysOn的应用
  8. 使用cronolog 分割Tomcat日志 Apache日志
  9. javascrip对表格的操作(三)
  10. PVLAN技术初探-巧用PVLAN优化网络