concurrent.futures 使用及解析
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 使用及解析相关推荐
- python线程池模块_python并发编程之进程池,线程池,协程(Python标准模块--concurrent.futures(并发未来))...
需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去 ...
- concurrent.futures模块使用
一.概念总结 1-1 池:控制进程数或线程数的概念. 服务器开启的进程数或线程数,会随并发的客户端数目单调递增.会产生巨大的压力于服务器,于是使用"池"的概念,对服务端开启的进程数 ...
- concurrent.futures 并发爬取 wos 的部分专利号和施引专利
工作上需要爬取 wos 的一些专利号和施引专利,做成了一个 excel 表格.施引专利在系统默认的导出里是没有的. 第一次实际运用了concurrent.futures 来处理并发下载,确实很简单.一 ...
- concurrent.futures模块(进程池线程池)
1.线程池的概念 由于python中的GIL导致每个进程一次只能运行一个线程,在I/O密集型的操作中可以开启多线程,但是在使用多线程处理任务时候,不是线程越多越好,因为在线程切换的时候,需要切换上下文 ...
- python 并行计算 并行方法总结 concurrent.futures pp pathos multiprocessing multiprocess模块 总结对比
目录 模块介绍文章 相近模块 1.按并行分类 (1)阻塞(非并行) (2)批次并行 (3)异步 2.按传参分类 (1)单个任务,任务多参数 (2)多个任务,任务单参数 (3)多个任务,任务多参数 3. ...
- concurrent.futures dataset
经过测试,没有发现比多线程块 import datetime import os import threading from concurrent.futures import ThreadPoolE ...
- python线程池模块_Python并发编程之线程池/进程池--concurrent.futures模块
一.关于concurrent.futures模块 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目达到一定的规模,频繁创建/ ...
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...
- python并发之concurrent.futures
concurrent:并发 Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码.从Python3.2开始,标准库为我们提供了concurr ...
最新文章
- 怎样解决MySQL数据库主从复制延迟的问题
- Bochs安装FreeDOS与调试
- 【小项目关键技术五】控制全彩 WS2812 灯环/灯带
- PyTorch框架学习七——自定义transforms方法
- 还在用 AI 和机器学习?简单的 SQL 脚本就能替代!
- r语言 四格画图_R绘图基础(一)
- 《Python核心编程》第二版第八章练习题答案 第三部分
- c语言杭电oj1090答案,杭电OJ水题答案.doc
- vue百度地图加载离线瓦片(包含百度离线文件+瓦片下载器)
- 利用java中的Calendar类完成当前月份日历Calendar类小练习
- Android home和back事件处理
- springboot实现统一日志管理
- 5行代码提升时间序列预测,都有用!
- 为什么要设置HashMap的初始化容量
- 深入理解原生js拖放(draggable)
- 最新!2020中国高校毕业生薪资排行出炉!
- 计算机网络怎么运行内存,电脑运行内存怎么扩大(教你使用虚拟内存来增加win7系统的运行内存)...
- Unity中国象棋(一)——初始化棋子
- 证明完全立方数模9同余_牡丹江2立方玻璃钢蓄水池报价
- JAVA计算机毕业设计在线玩具租赁系统Mybatis+源码+数据库+lw文档+系统+调试部署