首页 > 其他分享 >ThreadPoolExecutor获取线程池中已经运行完的任务结果

ThreadPoolExecutor获取线程池中已经运行完的任务结果

时间:2023-05-14 21:22:43浏览次数:33  
标签:COMPLETED times sleep import print 线程 池中 ThreadPoolExecutor

方法一: 使用as_completed函数

from concurrent.futures import ThreadPoolExecutor, as_completed
from time import sleep


def method(times):
    sleep(times)
    print('sleep {} secondes'.format(times))
    return times


pool = ThreadPoolExecutor(max_workers=2)
seconds = [i for i in range(10)]
tasks = [pool.submit(method, (second)) for second in seconds]
# as_completed函数会将运行完的任务一个一个yield出来
# 它返回任务的结果与提交任务的顺序无关,谁先执行完返回谁
for future in as_completed(tasks):
    print(future.result())

方法二: 使用map方法

from concurrent.futures import ThreadPoolExecutor
from time import sleep


def method(times):
    sleep(times)
    print('sleep {} secondes'.format(times))
    return times


pool = ThreadPoolExecutor(max_workers=2)
seconds = [i for i in range(4)]
# map方法会将任务运行的结果yield出来
# map方法返回任务结果的顺序与提交任务的顺序一致
for data in pool.map(method, seconds):
    print(data)

3.wait方法

wait方法用于阻塞主线程的运行, 可以设置当某些子线程运行完成以后再继续执行主线程
其第一个参数是future对象或future对象列表,return_when参数用于指定当哪些任务运行完成时继续执行主线程,其参数有:
FIRST_COMPLETED = 'FIRST_COMPLETED'
FIRST_EXCEPTION = 'FIRST_EXCEPTION'
ALL_COMPLETED = 'ALL_COMPLETED'
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED, FIRST_COMPLETED
import time
 
# 参数times用来模拟网络请求的时间
def get_html(times):
    time.sleep(times)
    print("get page {}s finished".format(times))
    return times
 
executor = ThreadPoolExecutor(max_workers=2)
urls = [3, 2, 4] # 并不是真的url
all_task = [executor.submit(get_html, (url)) for url in urls]
wait(all_task, return_when=ALL_COMPLETED)
print("main")

 




标签:COMPLETED,times,sleep,import,print,线程,池中,ThreadPoolExecutor
From: https://www.cnblogs.com/hushaojun/p/17400240.html

相关文章

  • C#全自动多线程上位机源码 0, 纯源代码。 1, 替代传统plc搭载的触摸屏
    C#全自动多线程上位机源码0,纯源代码。1,替代传统plc搭载的触摸屏。2,工控屏幕一体机直接和plc通信。3,功能强大,多级页签。4,可以自由设定串口或以太网通信。5,主页。6,报警页。7,手动调试页。8,参数设定页。9,历史查询页。10,系统设定页。11,赠送所有控件。......
  • 多线程qt5 c++ 工业自动化上位机源代码 Qt5之工业应用! 一套完
    多线程qt5c++工业自动化上位机源代码Qt5之工业应用!一套完整工程,链接PLC,工业无人值守自动扫码使用,无线扫码枪SR1000的使用,使用qt5.14,用qtcreator加载工程后,编译,运行,可调试可扩展,目的是学习qt开发方式。Sqlserver存储方式,查询自由。excel方便导出,c++效率无需赘言。不懂的随时和卖......
  • Qt5 C++ 多线程工业气体标定 1)使用OPC 封装COM 2)C++调用OPC; 3
    Qt5C++多线程工业气体标定1)使用OPC封装COM2)C++调用OPC;3)使用经典界面;4)使用QT专业皮肤编程qss;5)C++链接PLC读写数据;6)赠送KEPSVR服务器;参数如下:-----------------------------1)编程语言:C++(11或以上);-----------------------------2)编程环境:QT5.14;-----------------------------......
  • C#全自动多线程上位机源码编程 0, 纯源代码。 1, 替代传
    C#全自动多线程上位机源码编程0,纯源代码。1,替代传统plc搭载的触摸屏。2,工控屏幕一体机直接和plc通信。3,功能强大,多级页签。4,可以自由设定串口或以太网通信。5,主页。6,报警页。7,手动调试页。8,参数设定页。9,历史查询页。10,系统设定页。11,赠送所有控......
  • Qt实战,50套纯源码不怕你学不会! QT_多线程生产制造MES 1,
    Qt实战,50套纯源码不怕你学不会!QT_多线程生产制造MES1,现场实战项目。2,这是一个汽车部件制造企业的一条厂线现场精密控制。3,由本人单独完成。设计技术众多,C++,PLC,OPC,工业以太网(扫码枪),串口扫码枪,多种数据库(多台设备)无缝连接与切换。与该公司内部MES无缝链接。4,提供yd码!6,OPENCV......
  • 【从0开始编写webserver·基础篇#01】为什么需要线程池?写一个线程池吧
    线程池参考:1、游双Linux高性能服务器编程2、TinyWebServer注:虽然是"从0开始",但最好对(多)线程、线程同步等知识点有所了解再看,不然可能有些地方会理解不到位(但也有可能是我没说明到位,水平有限,见谅)Web服务器与线程池的关系Web服务器需要同时处理多个客户端请求,并且每个请求可......
  • QT_C++多线程生产制造MES 1,现场实战项目。 2,这是一个汽车部件制
    QT_C++多线程生产制造MES1,现场实战项目。2,这是一个汽车部件制造企业的一条厂线现场精密控制。3,由本人单独完成。设计技术众多,C++,PLC,OPC,工业以太网(扫码枪),串口扫码枪,多种数据库(多台设备)无缝连接与切换。与该公司内部MES无缝链接。4,提供yd码!不懂的可以随时问卖主哦!工业编程!工业编......
  • spring线程池ThreadPoolTaskExecutor
    1.自定义yml属性配置thread:pool:corePoolSize:5maxPoolSize:10queueCapacity:10keepAliveSeconds:1202.自定义线程池配置类@Configuration//配置类@EnableAsync//开线线程异步支持publicclassMyThreadPoolExecutor{@Autowiredprivat......
  • Java的线程
    介绍线程线程是系统调度的最小单元,一个进程可以包含多个线程,线程是负责执行二进制指令的。每个线程有自己的程序计数器、栈(Stack)、寄存器(Register)、本地存储(ThreadLocal)等,但是会和进程内其他线程共享文件描述符、虚拟地址空间等。对于任何一个进程来讲,即便我们没有主动去创建......
  • 线程的创建和使用
    线程的创建和使用Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread类来体现Thread类的特性每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体通过该Thread对象的start()方法来启动这个线程,而非直接调用run()Thread类......