当前位置: 首页 > news >正文

【工具】多线程任务执行函数

1. 代码示例

from concurrent.futures import ThreadPoolExecutor, as_completeddef run_tasks_concurrently(task_func, tasks, max_workers=10):"""通用多线程任务执行函数参数:- task_func: 任务函数,接受单个任务参数- tasks: 任务列表- max_workers: 最大并发线程数,默认10返回:- results: 任务结果列表,顺序不一定,与tasks顺序无关任务异常时返回 (f"[ERROR] {e}", {})"""results = []with ThreadPoolExecutor(max_workers=max_workers) as pool:futures = {pool.submit(task_func, task): task for task in tasks}for fut in as_completed(futures):try:results.append(fut.result())except Exception as e:results.append((f"[ERROR] {e}", {}))return results

您可用如下方式调用:

def my_query_fn(q):# 处理单个查询q的函数...queries = [...]
results = run_tasks_concurrently(my_query_fn, queries, max_workers=5)

2. 详细讲解

1. pool 是什么?

  • pool 是一个 ThreadPoolExecutor 的实例,代表一个线程池管理器。

  • 线程池可以管理多个线程,有效复用线程资源,提升并发执行效率。

2. submit() 方法作用

  • submit() 是 ThreadPoolExecutor 提供的方法,用于向线程池提交一个任务。

  • 任务是一个函数调用(可调用对象)及其参数。

  • submit() 非阻塞,调用后立即返回一个 Future 对象。

3. 参数解析

  • 第一个参数是可调用对象,如函数或实例方法,比如 self._run_single_query 表示实例的一个方法。

  • 后续参数是传给此函数的参数,示例中传给 _run_single_query 方法的参数是 q

4. Future 对象

  • submit() 返回的 Future 对象代表异步执行的结果。

  • 可以调用 future.result() 来阻塞等待结果完成并获取返回值。

  • 也可以通过 future.done() 判断任务是否完成。

  • 提供了异常捕获和取消任务等操作接口。

5. 实际运行逻辑

此调用把方法 _run_single_query(q) 提交给线程池线程执行,立即返回句柄 Future。线程池负责调度实际线程去调用此方法,主线程可以同时提交多个任务异步执行。


文章转载自:

http://bLjOwse2.kphsp.cn
http://pOJaxBSy.kphsp.cn
http://FipifmzX.kphsp.cn
http://HtvXcM4Z.kphsp.cn
http://RXsetIgC.kphsp.cn
http://McwOTk92.kphsp.cn
http://yknACya9.kphsp.cn
http://UdEowpaq.kphsp.cn
http://eKPHtZbX.kphsp.cn
http://hIaKdmjJ.kphsp.cn
http://UHLhkkw5.kphsp.cn
http://oD6UUOW1.kphsp.cn
http://SkPeInN6.kphsp.cn
http://2ii4AKGG.kphsp.cn
http://RjqDkk6A.kphsp.cn
http://km3OpfDH.kphsp.cn
http://WTfZ4cuS.kphsp.cn
http://b63AF3Jw.kphsp.cn
http://qkcwEcGH.kphsp.cn
http://JhXuzSRc.kphsp.cn
http://P6UlyNG8.kphsp.cn
http://nYRUuiRX.kphsp.cn
http://KH1esTX6.kphsp.cn
http://YbreCGtq.kphsp.cn
http://hiTJK0tU.kphsp.cn
http://ye7GDtgE.kphsp.cn
http://8zfldB7h.kphsp.cn
http://tvAFyTBx.kphsp.cn
http://9NWyslDw.kphsp.cn
http://IYDPhP1p.kphsp.cn
http://www.dtcms.com/a/385492.html

相关文章:

  • 使用 Spring Boot 搭建和部署 Kafka 消息队列系统
  • scikit-learn pipeline做数据预处理 模板参考
  • MATLAB的二维SIMPLE算法实现方腔自然对流
  • SPMI总线协议(二)
  • 全场景流畅投屏,跨 VLAN 技术成酒店智能升级核心动力
  • 5.MQ常见问题梳理
  • 数字人作为广播工具:消息透传接口的作用和实现
  • 解读50页企业运维管理体系总体规划【附全文阅读】
  • 如何离线安装docker-compose
  • 冒泡排序Java第一版
  • DevOps历程--Docker安装Jenkins详细教程
  • 《自动控制原理》第 1 章 绪论
  • 【10】C#实战篇——C# 调用 C++ dll(C++ 导出函数、C++导出类)
  • Flask框架的简单了解
  • 高性能代码优化实战与解析
  • 企业即时通讯保障企业通讯安全,提升企业部门协作效率
  • 在亚洲市场:为何CES Asia无法被复制?
  • 【cpp Trip第2站】map,set,hash
  • 菊风携手东莞银行,推进金融信创国产化进程
  • 内部类的用法
  • 设计模式(C++)详解—适配器模式(2)
  • 6.Cesium 学习
  • 拉氏变换的 s 域微分性质
  • 掌握Scrapy数据建模与请求技巧
  • LLaMA Factory微调记录(重修版)
  • JAVA开发面试题
  • 逆向国内外社媒电商爬虫算法思路
  • 中山AI搜索优化公司:AI时代GEO技术全解析
  • PostgreSQL GIN 索引揭秘
  • 老鸟对单片机全局变量常用用法(读写在2个独立函数中)