`concurrent.futures` 是 Python 标准库中的一个模块
先来看文档
concurrent.futures
是 Python 标准库中的一个模块,它提供了一个高级接口来异步执行代码,使用线程或进程池来并行运行任务。这个模块提供了两种主要的池类型:ThreadPoolExecutor
和 ProcessPoolExecutor
,以及一个通用的 Executor
接口。此外,Executor
接口中的 submit
方法用于提交任务给执行器执行。
1. ThreadingPoolExecutor
ThreadPoolExecutor
使用线程池来并行执行任务。由于线程共享同一个进程的内存空间,因此线程间通信和共享数据相对容易,但这也意味着它们不能充分利用多核处理器的优势,因为 Python 的全局解释器锁(GIL)限制了同一时间只有一个线程可以执行 Python 字节码。
2. ProcessPoolExecutor
ProcessPoolExecutor
使用进程池来并行执行任务。每个进程都有自己独立的内存空间,因此它们可以绕过 GIL,充分利用多核处理器的优势。然而,进程间通信和共享数据比线程间要复杂和昂贵。
3. Executor.submit
submit
方法是 Executor
接口的一部分,用于提交一个可调用的对象(通常是函数)给执行器执行。它返回一个 Future
对象,这个对象可以用来查询任务的状态、获取任务的返回值或取消任务。
示例
使用 ThreadPoolExecutor
from concurrent.futures import ThreadPoolExecutor
import timedef task(n):time.sleep(2)return n * nwith ThreadPoolExecutor(max_workers=3) as executor:futures = [executor.submit(task, i) for i in range(10)]for future in futures:print(future.result())
在这个例子中,我们创建了一个 ThreadPoolExecutor
,其最大工作线程数为 3。然后,我们提交了 10 个任务给执行器,每个任务调用 task
函数,并等待每个任务完成,打印其返回值。
使用 ProcessPoolExecutor
from concurrent.futures import ProcessPoolExecutor
import osdef task(n):return os.getpid(), n * nwith ProcessPoolExecutor(max_workers=3) as executor:futures = [executor.submit(task, i) for i in range(10)]for future in futures:pid, result = future.result()print(f"PID: {pid}, Result: {result}")
在这个例子中,我们创建了一个 ProcessPoolExecutor
,其最大工作进程数为 3。每个任务调用 task
函数,返回当前进程的 PID 和 n * n
的结果。我们打印每个任务的进程 ID 和结果,以展示任务是在不同的进程中执行的。
总结
ThreadPoolExecutor
适用于 I/O 密集型任务,因为线程间通信成本低。ProcessPoolExecutor
适用于 CPU 密集型任务,因为它可以绕过 GIL,充分利用多核处理器。submit
方法用于提交任务给执行器,并返回一个Future
对象用于查询任务状态或获取结果。
在 concurrent.futures
模块中,submit
函数是 Executor
接口的一部分,用于提交一个可调用的对象(如函数)给执行器(如 ThreadPoolExecutor
或 ProcessPoolExecutor
)异步执行。以下是对 submit
函数参数的详细说明,以及为何 name=value
时是实参,而 **kwargs
是形参的解释。
submit 函数的参数
submit
函数的定义通常如下:
submit(fn, *args, **kwargs)
fn
:这是需要异步执行的函数。它应该是一个可调用的对象,如函数、方法或实现了__call__
方法的类的实例。*args
:这是传递给fn
函数的位置参数。*args
允许你传递任意数量的位置参数给fn
。**kwargs
:这是传递给fn
函数的关键字参数。**kwargs
允许你传递任意数量的关键字参数给fn
,这些参数在函数调用时以name=value
的形式传递。
实参(Actual Arguments)与形参(Formal Parameters)
-
实参:在函数调用时传递给函数的实际值。在
submit
函数的上下文中,当你使用name=value
的形式传递参数时,这些name=value
对就是实参。例如,在executor.submit(my_function, x=10, y=20)
中,x=10
和y=20
就是实参。 -
形参:在函数定义中声明的参数。在
submit
函数被调用的函数fn
的上下文中,fn
函数定义中声明的参数就是形参。例如,如果fn
定义为def my_function(x, y)
,则x
和y
就是形参。
当你使用 **kwargs
在 submit
函数中传递参数时,这些参数以关键字参数的形式传递给 fn
函数。由于 **kwargs
在 submit
函数定义中是一个形参(它接受任意数量的关键字参数),而这些关键字参数在 submit
被调用时成为传递给 fn
函数的实参。
示例
假设我们有一个简单的函数 my_function
,它接受两个参数 x
和 y
,并返回它们的和:
def my_function(x, y):return x + y
我们可以使用 ThreadPoolExecutor
和 submit
函数来异步调用 my_function
:
from concurrent.futures import ThreadPoolExecutorwith ThreadPoolExecutor(max_workers=1) as executor:future = executor.submit(my_function, x=10, y=20) # 这里 x=10, y=20 是实参result = future.result() # 获取异步执行的结果print(result) # 输出: 30
在这个例子中,x=10
和 y=20
是传递给 my_function
的实参,而 x
和 y
是 my_function
的形参。**kwargs
在 submit
函数中允许我们以关键字参数的形式传递这些实参给 my_function
。
相关文章:

`concurrent.futures` 是 Python 标准库中的一个模块
先来看文档 concurrent.futures 是 Python 标准库中的一个模块,它提供了一个高级接口来异步执行代码,使用线程或进程池来并行运行任务。这个模块提供了两种主要的池类型:ThreadPoolExecutor 和 ProcessPoolExecutor,以及一个通用的…...

PicoQuant GmbH公司Dr. Christian Oelsner到访东隆科技
昨日,德国PicoQuant公司的光谱和显微应用和市场专家Dr.Christian Oelsner莅临武汉东隆科技有限公司。会议上Dr. Christian Oelsner就荧光寿命光谱和显微技术的最新研究和应用进行了深入的交流与探讨。此次访问不仅加强了两家公司在高科技领域的合作关系,…...

leetcode128最长连续序列 golang版
题目描述 题目:给定一个未排序的整数数组 nums 找出数字连续的最长序列,不要求序列 元素在原数组中连续 的长度 请你设计并实现时间复杂度为On的算法解决此问题 示例 1: 输入:nums [100,4,200,1,3,2] 输出:4 解释&…...

【OpenCV】(六)—— 阈值处理
阈值处理(Thresholding)用于将灰度图像转换为二值图像。通过设定一个或多个阈值,可以将图像中的像素分为不同的类别,通常用于分割前景和背景、简化图像、去除噪声等任务。OpenCV 提供了多种阈值处理方法,下面介绍基本阈…...

重学SpringBoot3-集成Redis(九)之共享Session
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(九)之共享Session 1. 为什么需要 Session 共享2. Spring Session 和 Redis 的集成2.1. 引入依赖2.2. 配置 Redis 连接…...

Linux:信号保存与处理
使用kill -l命令查看信号: 信号量和信号确实一点关系没有 信号是操作系统发出的进程与进程之间的通知于中断,是进程之间时间异步通知的一种方式 先了解同步通信:同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步…...

工具方法 - 可选的一些AI聊天机器人
1, ChatGPT OpenAI https://chatgpt.com/ 2, Microsoft Copilot Microsoft Copilot: 你的 AI 助手 Microsoft Copilot: 你的 AI 助手 3, HuggingChat Hugging Face – The AI community building the future. https://huggingface.co/ https://huggingface.co/chat/ 4,…...

YOLOv11改进策略【卷积层】| CVPR-2023 ScConv:即插即用,减少冗余计算并提升特征学习
一、本文介绍 本文记录的是利用ScConv优化YOLOv11的目标检测网络模型。深度神经网络中存在大量冗余,不仅在密集模型参数中,而且在特征图的空间和通道维度中。ScConv模块通过联合减少卷积层中空间和通道的冗余,有效地限制了特征冗余,本文利用ScConv模块改进YOLOv11,提高了…...

总结拓展十四:批次管理(2)
1、批次管理后台配置 1.1 批次管理级别配置(T-code:OMTC) ——路径:IMG->后勤-常规->批次管理->指定级别并激活状态管理 1.2 批次状态管理配置(T-code:OMTC) ——路径:IMG->后勤-常规->批次管理->指定级别并激活状态管理 批状态管…...

架构设计笔记-18-安全架构设计理论与实践
知识要点 常见的安全威胁: 信息泄露:信息被泄露或透露给某个非授权的实体。破坏信息的完整性:数据被非授权地进行增删、修改或破坏而受到损失。拒绝服务:对信息或其他资源的合法访问被无条件地阻止。攻击者向服务器发送大量垃圾…...

Python网络爬虫
随着互联网的迅猛发展,数据成为了新的“石油”。人们对于信息的需求日益增涨,尤其是在市场分析、学术研究和数据挖掘等领域。网络爬虫作为一种自动提取网络数据的技术,因其强大的能力而备受关注。而Python,凭借其简洁的语法和丰富…...

38. 外观数列
目录 一、问题描述 二、解题思路 三、代码 四、复杂度分析 一、问题描述 「外观数列」是一个数位字符串序列,由递归公式定义: countAndSay(1) "1"countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。 行程长度编码(RLE&am…...

Android中的三种数据存储方式
目录 1.文件存储 1)内部存储 1--MODE_PRIVATE: 2--MODE_APPEND: 3--MODE_WORLD_READABLE: 4--MODE_WORLD_WRITEABLE: 5--简单使用 3)外部存储 4)内部读取 4)外部读取 2.SharePreferences存储 1)基本概念 2)…...

VS2022中Qt环境配置步骤
VS2022中Qt环境配置步骤 一、安装QT 下载QT:从QT官网上下载QT,在安装过程中,可以根据自己的需求选择适合的QT版本。若不确定,建议选择最新版本,这有助于提高开发效率。 二、安装Visual Studio 2022 选择组件&#…...

【前端】 常用的版本控制符号汇总
前端的版本控制符主要用于管理前端项目中依赖包的版本。它们通常在package.json文件中定义,帮助开发者指定所需的库和框架的版本范围。以下是一些关键概念: 版本控制符号详解: 1. 依赖管理 在前端开发中,依赖管理工具ÿ…...

OWASP Top 10 漏洞详解:基础知识、面试常问问题与实际应用
OWASP(开放式Web应用程序安全项目)是一个全球性非营利组织,致力于提高软件安全性。OWASP Top 10 是其发布的十大Web应用程序安全风险列表,广泛应用于安全领域的学习和实践。本文将详细介绍OWASP Top 10 漏洞的基础知识、面试常见问…...

实景三维赋能自然资源精细化管理创新
在自然资源管理领域,如何实现精细化、高效化管理一直是我们面临的挑战。随着实景三维技术的兴起,这一挑战迎来了新的解决方案。今天,我们将探讨实景三维技术如何赋能自然资源的精细化管理。 1. 实景三维技术概述 实景三维技术是一种集成了遥…...

Science Robotics 通过新材料打造FiBa软机器人 可实现四种形态进化
近几年由于材料科学的进步,软机器人相关技术近几年研究成果显著,与传统的刚性机器人相比,软机器人的设计灵感来源于自然界中的生物系统,如蠕虫、章鱼、壁虎和青蛙等。这些生物利用柔软、有弹性的材料,在复杂环境中展现…...

C++ 的特性可以不用在主函数中调用
写完代码,都找不到从哪里进去...

香港大学神作 LightRAG 横空出世!AI 检索生成系统革命,秒懂复杂信息,动态数据无所遁形!
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 微信订阅号|搜一搜&…...

云栖实录 | 智能运维年度重磅发布及大模型实践解读
本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人: 钟炯恩 | 阿里云智能集团运维专家 张颖莹 | 阿里云智能集团算法专家 活动: 2024 云栖大会 AI 可观测专场 -智能运维:云原生大规模集群GitOps实践 2024 …...

Vue3中防止按钮重复点击的方式
本文列两种方式,推荐第一种,经过长时间测试第二种防止的还是会漏,这里也列一下 ①使用定时器(推荐) 判断3秒钟之内方法只能执行一次 <el-button click"handleClick" type"primary" :loading…...

windows主机重新安装zabbix agent提示please clear the previous agent registration
目录 1. Zabbix Agent1.1 错误提示 2. 解决方法2.1 管理员运行cmd2.2 可以正常安装 1. Zabbix Agent 1.1 错误提示 2. 解决方法 2.1 管理员运行cmd 输入 sc.exe delete “Zabbix Agent” 或者 sc.exe delete “Zabbix Agent 2” 如果成功会出现“[SC] DeleteService SUCCES…...

一个将.Geojson文件转成shapefile和kml文件的在线页面工具
最近需要读取.geojson格式的流域边界文件。在谷歌地球桌面版和globalMapper中均无法正常读取。下面我发现的一个在线的平台可以很好实现这一功能。 GeoJSON to SHP Converter Online - MyGeodata Cloud ❤️欢迎点赞收藏❤️...

Mamba学习笔记(1)——原理基础
文章目录 Mamba: Linear-Time Sequence Modeling with Selective State Spaces0 Abstract1 Introduction2 State Space Models3 Selective State Space Models3.1 Motivation: Selection as a Means of Compression3.2 Improving SSMs with Selection3.3 Efficient Implementat…...

linux应用
检查Python程序未运行则重新运行 entity_program定时杀掉进程重新运行 match_program定时检查是否运行,未运行则启动 (注意echo时间时,date和中间要有空格) #!/bin/bash# 检测的Python程序名称 entity_program"entity.py" match_program"…...

【千库网-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

【LwIP源码学习3】TCP协议栈分析——数据接收流程
前言 本文介绍代码在lwip的tcp_in.c文件中,主要介绍TCP协议栈中数据的接收流程。 正文 1、一个正常的TCP数据,首先会传入到 tcp_input(struct pbuf *p, struct netif *inp)函数,其中指针p指向传入的数据流。 2、从数据流中获取TCP头部 …...

【bug】finalshell向远程主机拖动windows快捷方式导致卡死
finalshell向远程主机拖动windows快捷方式导致卡死 问题描述 如题,作死把桌面的快捷方式拖到了finalshell连接的服务器面板中,导致finalshell没有响应(小概率事件,有时会触发) 解决 打开任务管理器查看finalshell进…...

基于SpringBoot剧本杀管理系统 【附源码】
基于SpringBoot剧本杀管理系统 效果如下: 系统首页界面 系统注册页面 剧本信息详细页面 后台登录界面 管理员主界面 剧本信息界面 剧本预约界面 作者主界面 研究背景 随着现代社会生活节奏的加快,人们越来越渴望通过各种娱乐活动来释放压力和增进社交…...