python 线程池中回调函数的运行所在

python 进/线程基础

可以参考另外一位同学写的博客
https://blog.csdn.net/u013210620/article/details/78687028

python 线程池添加的回调函数运行是在哪个线程中?

在Python的concurrent,futures模块中 当你向ThreadPoolExecutor提交任务(即调用submit函数)时,任务会在池中的一个线程中执行。一旦任务完成,任何通过add_ done_callback方法添加的回调函数都会被调用。
这些回调函数是在执行任务的那个线程(即完成工作的工作者线程)中执行的 ,而不是在主线程中。这意味着回调函数的执行是在池中线程的上下文中,以异步方式进行的。因为它们在线程池的工作线程内执行,你仍然需要注意线程安全的问题,尤其是当回调函数尝试访问共享资源或变量时。一定要确保你在回调函数中执行的操作是线程安全的,避免引入党态条件。如果必要,你可以使用锁等同步 原语来保护对共享资源的访问。

多个任务的回调函数是在同一个线程中,还是分别在各自的线程中完成?

当你使用Python的concurrent.futures.ThreadPooLExecutor提交多个任务时,每个任务将被分配到线程池中的一个工作线程中去执行。这些任务可以并行执行 (具体取决于系统的线程调度和可用核心数)。对于这些任务的回调函数,它们是在这些任务完成执行后被调用的。
关于回调函数是在同一个线程中执行,还是在不同的线程中执行,关键点在于:

  1. 不同任务的回调函数可能会在不同的线程中执行。 每个任务的回调函数是在该任务完成后由执行该任务的线程触发的。(如果两个任务恰好被分配给了线程池中的不同线程,它们的回调函数也会在这些线程中分别执行。
  2. 相同或相关任务的回调函数可能会在同一个线程中执行 ,如果这些任务恰好被分配给相同的线程。
  3. 线程池的工作方式是重用线程。 当一个线程完成任务并运行了对应的回调函数之后,这个线程可能会被分配给另一个任务。这意味着,即使多个任务的回调函数可能在逻辑上是相互独立的,它们也可能在物理上由同一个线程(在不同时间点)执行。

总的来说,回调函数是与其对应的任务相关联的,并在任务执行的线程中被调用。不同任务的回调函数可以在不同的线程中执行,这完全取决于任务是如何被线程池中的线程执行的。因此,在编写回调函数时,你应该假设它们可能在多线程环境下运行,并确保任何共享资源的访问都是线程安全的。

talk is cheap,show your code

import concurrent.futures
import threading
import timedef task(n):thread_name = threading.current_thread().nameif thread_name == "MainThread":thread_type = "主线程"else:thread_type = "子线程"time.sleep(1)print(f"执行函数的输入是:{n}, 在 {thread_type} ({thread_name}) 中执行。")return ndef callback(future):thread_name = threading.current_thread().nameif thread_name == "MainThread":thread_type = "主线程"else:thread_type = "子线程"result = future.result()print(f"回调函数的结果:{result}, 在 {thread_type} ({thread_name}) 中执行。")# 获取主线程的名称
main_thread_name = threading.current_thread().name# 使用线程池并为每个任务添加回调函数
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:futures = []for i in range(5):future = executor.submit(task, i)future.add_done_callback(callback)futures.append(future)# 等待所有的任务完成concurrent.futures.wait(futures)# 程序运行结束
print(f"主程序在 {main_thread_name} 中运行完毕。")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1421404.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

聚焦医疗敏感数据使用保护,建设一体化数据安全平台

医疗行业积累了海量高敏患者诊疗信息,患者隐私敏感信息天然具备被保护属性。随着医院业务向智慧互联的转型发展,所有涉及敏感数据处理的机构皆需要承担数据保护的职责与义务,导致医疗数据保护的实际边界变得日益模糊,加剧了医疗数…

接搭建仿美团、代付系统源码搭建教程

最近很多粉丝催更、分享一下地球号:xiaobao0214520(WX) 现在大家都很流行搞网恋,我们搭建一个跟美团相似的系统 然后开发一个好友代付,我们在点单的时候转发链接让网恋对象付钱 若只是单点外卖的话,能榨出的油水还是太少。 所以…

2024年AIGC发展趋势报告

来源:靠谱二次元 AIGC,即人工智能生成内容,是近年来在人工智能领域兴起的一项重要技术。 它通过使用机器学习和深度学习等技术,使得计算机能够自动生成各种形式的数字内容,如文本、图像、音频和视频等。 AIGC的发展可…

学校能源消耗监测管理系统,打造智能监测系统

学校能源消耗监测管理系统是一款针对,水、电、煤、气、热等能源的在线监测、分析与处理的系统,为学校管理者提供全面的能源使用情况,为学校管理工作提供了有力的支持。 为什么要建设能源管理系统? 用能需求增加 随着学校的快速…

React-hooks:useMemo

useMemo 是一个 React Hook,它在每次重新渲染的时候能够缓存计算的结果。 const cachedValue useMemo(calculateValue, dependencies)参数 calculateValue:要缓存计算值的函数。它应该是一个没有任何参数的纯函数,并且可以返回任意类型。Re…

社交巨头:探索Facebook的震撼力量

Facebook作为社交媒体领域的巨头,不仅在数字化社会中占据着重要地位,更是影响了人们的生活、工作和社交方式。本文将深入探索Facebook的震撼力量,从多个角度解读其在当今社会中的重要性和影响。 1. 全球用户覆盖的壮观规模 Facebook作为全球…

基于vs和C#的WPF应用之动画4---跳跳球

一、画布和图形 <Canvas x:Name"canvas4" Grid.Row"1" Grid.Column"1" Width"200" Height"200"><Canvas.Triggers><EventTrigger RoutedEvent"Loaded"><BeginStoryboard Storyboard"…

通过Mendix Portal管理应用整个生命周期

一、前言 大家常常会听到Mendix是一个统一的平台&#xff0c;怎么理解这个统一平台呢&#xff1f;它指的是帮助企业搭建一个统一的开发平台&#xff0c;管理应用的整个生命周期&#xff0c;之前大家更多地关注在应用开发层面&#xff0c;而开发只是整个生命周期的一环。 从上图…

#APPINVENTOR扩展插件之MQTT

1.APPINVENTOR网址&#xff1a; http://code.appinventor.mit.edu/http://code.appinventor.mit.edu/ 对应AI伴侣下载地址&#xff1a;http://code.appinventor.mit.edu/companions/MITAI2Companion.apkhttp://code.appinventor.mit.edu/companions/MITAI2Companion.apk 2.MQ…

C# WinForm —— 16 MonthCalendar 介绍

1. 简介 可以选择单个日期&#xff0c;也可以选择一段日期&#xff0c;在选择时间范围上 比较适用&#xff0c;但不能跨月份选择日期范围 在直观上&#xff0c;可以快速查看、选择日期/日期范围 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般…

Pyhton专题学习资料包,Python从入门到精通全套学习资料[30G]

资源概览 百本Python学习书籍大礼包百本前端学习书籍大礼包微专业-数据挖掘分析之Python篇小甲鱼零基础入门学习Python(全96集) 资源获取 &#x1f9d1;‍&#x1f4bb;【Pyhton专题资料】【30G】 百本Python书籍## 百本前端书籍 微专业-数据挖掘分析之Python篇 预备课【先…

高德地图,用AMapLoader组件,点击地图添加点并获取经纬度

效果如图所示 在这块我用的是高德地图,使用的是AMapLoader组件,这样就省去了很多配置步骤 代码如下 // 打开地图openMap() {this.mapBox true;this.$nextTick(() > {this.initMap();});},// 初始化高德地图initMap() {AMapLoader.load({key: "xxxxxxxxx", //key…

docker八大架构之应用服务集群架构

应用服务集群架构 在之前&#xff0c;一个应用层要负责所有的用户操作&#xff0c;但是有时用户增加后就会导致供不应求的现象&#xff08;单个应用不足以支持海量的并发请求&#xff0c;高并发的时候站点响应变慢&#xff09;&#xff0c;这时就需要增加应用层服务器&#xf…

【EI会议】2024年电网、电气与电子工程国际会议(PCEEE 2024)

2024 International Conference on Power Grid, Electrical and Electronic Engineering 【1】会议简介 2024年电网、电气与电子工程国际会议即将拉开帷幕&#xff0c;这是一场集结全球电网、电气与电子工程领域精英的学术盛会。 本次会议旨在深入探讨电网、电气与电子工程领域…

EasyExcel导出Excel文件——合并单元格多层级数据导出

合并单元格多层数据导出 思维脑图 代码实现 /*** 导出所有信息** param request 请求体*/ Override public void getWilliamExportList(WilliamReqVo request, HttpServletResponse response) throws Exception {List<SysDictData> dataByType dictDataService.getDic…

【51】Camunda8-Zeebe核心引擎-Zeebe Gateway

概述 Zeebe网关是Zeebe集群的一个组件,它可以被视为Zeebe集群的联系点,它允许Zeebe客户端与Zeebe集群内的Zeebe代理进行通信。有关Zeebe broker的更多信息,请访问我们的附加文档。 总而言之,Zeebe broker是Zeebe集群的主要部分,它完成所有繁重的工作,如处理、复制、导出…

【OpenVINO™】在 C# 中使用OpenVINO™ 部署PP-YOLOE实现物体检测

前言 OpenVINO™ C# API 是一个 OpenVINO™ 的 .Net wrapper&#xff0c;应用最新的 OpenVINO™ 库开发&#xff0c;通过 OpenVINO™ C API 实现 .Net 对 OpenVINO™ Runtime 调用&#xff0c;使用习惯与 OpenVINO™ C API 一致。OpenVINO™ C# API 由于是基于 OpenVINO™ 开发…

在实时超声病变检测中挖掘负面时间背景以抑制假阳性

文章目录 Mining Negative Temporal Contexts for False Positive Suppression in Real-Time Ultrasound Lesion Detection摘要挖掘负面时间背景以抑制假阳性&#xff1a;实时超声病变检测的新方法方法实验结果 Mining Negative Temporal Contexts for False Positive Suppress…

谷歌全球倾斜摄影OSGB数据转换正式版V1.0发布!

谷歌全球倾斜摄影OSGB数据转换正式版V1.0来了&#xff01; 五一放假前发布了V0.2版本&#xff0c;在这个版本中&#xff0c;生成了台北地区倾斜摄影OSGB数据&#xff0c;共有335GB&#xff0c;同时针对一些比较严重的问题进行了修复&#xff0c;包括修复瓦片缺失&#xff0c;数…

体重秤蓝牙语音芯片方案-WT2605蓝牙音频ic在电子秤上的应用

在快节奏的现代生活中&#xff0c;健康成为了每个人关注的焦点。而体重作为健康指标之一&#xff0c;更是备受关注。如今&#xff0c;一款全新的智能体重秤蓝牙语音芯片方案正悄然改变着我们的健康管理方式&#xff0c;让健康触手可及。 性能&#xff1a; 1&#xff1a;蓝牙语…