python 线程池用法_python 线程池 ThreadPoolExecutor 的用法
1. 线程池的基本用法
# coding: utf-8
from concurrent.futures import ThreadPoolExecutor
import time
def spider(page):
time.sleep(page)
print(f"crawl task{page} finished")
return page
with ThreadPoolExecutor(max_workers=5) as t: # 创建一个最大容纳数量为5的线程池
task1 = t.submit(spider, 1)
task2 = t.submit(spider, 2) # 通过submit提交执行的函数到线程池中
task3 = t.submit(spider, 3)
print(f"task1: {task1.done()}") # 通过done来判断线程是否完成
print(f"task2: {task2.done()}")
print(f"task3: {task3.done()}")
time.sleep(2.5)
print(f"task1: {task1.done()}")
print(f"task2: {task2.done()}")
print(f"task3: {task3.done()}")
print(task1.result()) # 通过result来获取返回值
executor = ThreadPoolExecutor(max_workers=5)
all_task = [executor.submit(send_data,"a" ) for i in range(1,2)]
'''
上面的代码等价于下面的:
all_task = []
for i in range(1,2):
task = executor.submit(send_data,"b" ) # "b"是给 方法send_data 传参,如果send_data有多个参数, executor.submit(send_data,"b","c","d" )
all_task.append(task)
'''
for future in as_completed(all_task):
print("finish the task")
obj_data = future.result()
print("obj_data is ", obj_data)
def send_data(a):
print("a is ", a)
as_completed:
上面虽然提供了判断任务是否结束的方法,但是不能在主线程中一直判断啊。最好的方法是当某个任务结束了,就给主线程返回结果,而不是一直判断每个任务是否结束。
ThreadPoolExecutorThreadPoolExecutor 中 的 as_completed() 就是这样一个方法,当子线程中的任务执行完后,直接用 result() 获取返回结果
参考:
python 线程池用法_python 线程池 ThreadPoolExecutor 的用法相关推荐
- python多线程队列处理_Python线程和队列使用的一点思考
Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...
- python timer详解_python线程定时器Timer实现原理解析
这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...
- python 定时器实现原理_python线程定时器Timer实现原理解析
这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...
- python线程池操作_python线程池和进程池
线程池和进程池 开局来张图 使用线程池的好处 1.提升性能:因为减去了大量新建.终止线程的开销,重用了线程资源 2.使用场景:适合处理突发性大量请求或需要大量线程完成任务.但实际任务处理时间较短 3. ...
- python 进程池不足_python 进程池pool简单使用
平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用. 需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ' ...
- python 异步 生产者 消费者_python 线程通信 生产者与消费者
1 """ 2 线程通信的生产者与消费者3 python的queue模块中提供了同步的线程安全的队列类,都具有原子性,实现线程间的同步4 Queue (FIFO: fis ...
- python死机怎么办_Python线程死机
也许这会有帮助:import threading class MyQueue: def __init__(self): self.tasks = [] self.tlock = threading.S ...
- python timer怎么用_python定时器(Timer)用法简单实例
python定时器(Timer)用法简单实例 本文实例讲述了python定时器(Timer)用法.分享给大家供大家参考.具体如下: # encoding: UTF-8 import threading ...
- python的for语句用法_python中list循环语句用法实例
本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个 ...
最新文章
- VTK:PolyData之WarpSurface
- common lisp 学习第二天 简单数据库操作
- untitled软件怎么用_苹果手机怎么用4G网络于App Store下载超过200MB以上的软件
- 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)
- (005)CSS选择器的具体性与层叠
- CTA策略:主力连续、全合约模式下回测结果的差异探讨
- 【保研记录】预推免面试可能遇到的问题(偏计算机)
- 微信小程序转发朋友圈
- 一个野生程序员的自我修养
- 【Python】在Windows 10 中,安装django-bootstrap-modal-forms
- VINS-Mono 代码解析六、边缘化(2)理论和代码详解
- 没有服务器认证消息,关于《跑跑卡丁车》没有服务器认证消息的问题,怎么解决?...
- php流程管理软件,MYSQL数据库管理软件PHPAdmin操作流程
- 两种三角形的打印方法
- 最详细的虚拟机安装教程
- 告别win10图片查看器内存占用过高,使用windows原来的照片查看器
- 通信中台的概念界定与能力拆解
- Assembly 调用的目标发生了异常
- 现代希腊语字母表(待续)
- Solidity的函数类型以及可见性分析(类比Java)
热门文章
- 由系统调用想起的。。。
- Flask 源代码阅读笔记
- Objective-C路成魔【11-多态性、动态类型和动态绑定】
- java7新添加的一些特性--转
- 【Centos配置2】远程管理必备工具配置:ssh/vnc/webadmin
- 一个入门级的Java Applet
- java list 在头部添加6_【Java提高十六】集合List接口详解
- oracle 自治事物,自治事务 - 努力创造未来! - BlogJava
- 虚拟机服务器拒绝密码,Xshell连接不上虚拟机连接提示SSH服务器拒绝了密码,请再试一次...
- gnuplot画图命令_Gnuplot科学绘图(二十六)——image 绘图