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 的用法相关推荐

  1. python多线程队列处理_Python线程和队列使用的一点思考

    Python线程和队列使用的一点思考 1. 斗哥采访环节请问为什么要使用线程? 答:为了提高程序速度,代码效率呀. 请问为什么要使用队列? 答:个人认为队列可以保证线程安全,实现线程间的同步,比较稳. ...

  2. python timer详解_python线程定时器Timer实现原理解析

    这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...

  3. python 定时器实现原理_python线程定时器Timer实现原理解析

    这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...

  4. python线程池操作_python线程池和进程池

    线程池和进程池 开局来张图 使用线程池的好处 1.提升性能:因为减去了大量新建.终止线程的开销,重用了线程资源 2.使用场景:适合处理突发性大量请求或需要大量线程完成任务.但实际任务处理时间较短 3. ...

  5. python 进程池不足_python 进程池pool简单使用

    平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用. 需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ' ...

  6. python 异步 生产者 消费者_python 线程通信 生产者与消费者

    1 """ 2 线程通信的生产者与消费者3 python的queue模块中提供了同步的线程安全的队列类,都具有原子性,实现线程间的同步4 Queue (FIFO: fis ...

  7. python死机怎么办_Python线程死机

    也许这会有帮助:import threading class MyQueue: def __init__(self): self.tasks = [] self.tlock = threading.S ...

  8. python timer怎么用_python定时器(Timer)用法简单实例

    python定时器(Timer)用法简单实例 本文实例讲述了python定时器(Timer)用法.分享给大家供大家参考.具体如下: # encoding: UTF-8 import threading ...

  9. python的for语句用法_python中list循环语句用法实例

    本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个 ...

最新文章

  1. VTK:PolyData之WarpSurface
  2. common lisp 学习第二天 简单数据库操作
  3. untitled软件怎么用_苹果手机怎么用4G网络于App Store下载超过200MB以上的软件
  4. 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)
  5. (005)CSS选择器的具体性与层叠
  6. CTA策略:主力连续、全合约模式下回测结果的差异探讨
  7. 【保研记录】预推免面试可能遇到的问题(偏计算机)
  8. 微信小程序转发朋友圈
  9. 一个野生程序员的自我修养
  10. 【Python】在Windows 10 中,安装django-bootstrap-modal-forms
  11. VINS-Mono 代码解析六、边缘化(2)理论和代码详解
  12. 没有服务器认证消息,关于《跑跑卡丁车》没有服务器认证消息的问题,怎么解决?...
  13. php流程管理软件,MYSQL数据库管理软件PHPAdmin操作流程
  14. 两种三角形的打印方法
  15. 最详细的虚拟机安装教程
  16. 告别win10图片查看器内存占用过高,使用windows原来的照片查看器
  17. 通信中台的概念界定与能力拆解
  18. Assembly 调用的目标发生了异常
  19. 现代希腊语字母表(待续)
  20. Solidity的函数类型以及可见性分析(类比Java)

热门文章

  1. 由系统调用想起的。。。
  2. Flask 源代码阅读笔记
  3. Objective-C路成魔【11-多态性、动态类型和动态绑定】
  4. java7新添加的一些特性--转
  5. 【Centos配置2】远程管理必备工具配置:ssh/vnc/webadmin
  6. 一个入门级的Java Applet
  7. java list 在头部添加6_【Java提高十六】集合List接口详解
  8. oracle 自治事物,自治事务 - 努力创造未来! - BlogJava
  9. 虚拟机服务器拒绝密码,Xshell连接不上虚拟机连接提示SSH服务器拒绝了密码,请再试一次...
  10. gnuplot画图命令_Gnuplot科学绘图(二十六)——image 绘图