python进程池、线程池

 Python广为使用的并发处理库futures使用入门与内部原理_concurrent.futures-CSDN博客

 ThreadPoolExecutor(max_workers=1)
池中至多创建max_workers个线程的池来同时异步执行,返回Executor实例、支持上下文,进入时返回自己,退出时调用

submit(fn, *args, **kwargs) 
提交执行的函数及其参数,如有空闲开启daemon线程,返回Future类的实例

shutdown(wait=True)
清理池,wait表示是否等待到任务线程完成

future类

done() 
如果调用被成功的取消或者执行完成,返回True

cancelled() 
如果调用被成功的取消,返回True

running() 
如果正在运行且不能被取消,返回True

cancel() 
尝试取消调用。如果已经执行且不能取消返回False,否则返回True

result(timeout=None) 
取返回的结果,timeout为None,一直等待返回;timeout设置到期,抛出concurrent.futures.TimeoutError 异常

exception(timeout=None)
取返回的异常,timeout为None,一直等待返回;timeout设置到期,抛出concurrent.futures.TimeoutError 异常

# coding: utf8
# t.pyimport time
import fire
import threading
from concurrent.futures import ThreadPoolExecutor, wait# 分割子任务
def each_task(index):time.sleep(1)  # 睡1s,模拟IOprint("thread %s square %d" % (threading.current_thread().ident, index))return index * index  # 返回结果def run(thread_num, task_num):# 实例化线程池,thread_num个线程executor = ThreadPoolExecutor(thread_num)start = time.time()fs = []  # future列表for i in range(task_num):fs.append(executor.submit(each_task, i))  # 提交任务wait(fs)  # 等待计算结束end = time.time()duration = end - starts = sum([f.result() for f in fs])  # 求和print("total result=%s cost: %.2fs" % (s, duration))executor.shutdown()  # 销毁线程池if __name__ == '__main__':fire.Fire(run)

python test5.py 5 10   设置了5个线程10个任务

# coding: utf8
# p.pyimport os
import sys
import math
import time
import fire
from concurrent.futures import ProcessPoolExecutor, wait# 分割子任务
def each_task(n):# 按公式计算圆周率s = 0.0for i in range(n):s += 1.0 / (i + 1) / (i + 1)time.sleep(2)# print(s)pi = math.sqrt(6 * s)print(str(os.getpid())+ "===="+str(pi))# os.getpid可以获得子进程号sys.stdout.write("process %s n=%d pi=%s\n" % (os.getpid(), n, pi))return pidef run(process_num, *ns):  # 输入多个n值,分成多个子任务来计算结果# 实例化进程池,process_num个进程executor = ProcessPoolExecutor(process_num)start = time.time()fs = []  # future列表for n in ns:fs.append(executor.submit(each_task, int(n)))  # 提交任务print("len(fs)", len(fs))wait(fs)  # 等待计算结束end = time.time()duration = end - startprint("total cost: %.2fs" % duration)executor.shutdown()  # 销毁进程池if __name__ == '__main__':# fire.Fire(run)run(2,6,10) # 2个线程2个任务

 

import time
from concurrent.futures import ThreadPoolExecutor, wait
import datetime
import logging
import threading
FORMAT = "%(asctime)s [%(processName)s %(threadName)s] %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)def calc(base):sum = basefor i in range(5):time.sleep(1)sum += 1logging.info(str(sum)+"==========="+str(threading.current_thread()))print("sum为",sum)return sumstart = datetime.datetime.now()
executor = ThreadPoolExecutor(3) # 设置3个线程
with executor:  # 默认shutdown阻塞fs = []for i in range(3): # 设置了3个任务同时执行,互不影响future = executor.submit(calc, i * 100)fs.append(future)# wait(fs) # 阻塞print('-' * 30)
print("len(fs)",len(fs))
for f in fs:print(f, f.done(), f.result())  # done不阻塞,result阻塞
print('=' * 30)
delta = (datetime.datetime.now() - start).total_seconds()
print(delta)

 

import time
from concurrent.futures import ProcessPoolExecutor, wait
import datetime
import logging
import osFORMAT = "%(asctime)s [%(processName)s %(threadName)s] %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)def calc(base):sum = basefor i in range(5):sum += 1time.sleep(2)print(str(os.getpid())+"========="+str(sum))logging.info(sum)return sumif __name__ == '__main__':start = datetime.datetime.now()executor = ProcessPoolExecutor(3)with executor:  # 默认shutdown阻塞fs = []for i in range(3):future = executor.submit(calc, i * 100)fs.append(future)# wait(fs) # 阻塞print('-' * 30)for f in fs:print(f, f.done(), f.result())  # done不阻塞,result阻塞print('=' * 30)delta = (datetime.datetime.now() - start).total_seconds()print(delta)

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51c~SLAM~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12327374 #GSLAM 自动驾驶相关~~~ 一个通用的SLAM架构和基准 GSLAM:A General SLAM Framework and Benchmark 开源代码:https://github.com/zdzhaoyong/GSLAM SLAM技术最近取得了许多成功&am…

Node.js 完全教程:从入门到精通

Node.js 完全教程:从入门到精通 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,允许开发者在服务器端使用 JavaScript。它的非阻塞 I/O 和事件驱动架构使得 Node.js 非常适合于构建高性能的网络应用。本文将详细介绍 Node.js 的安装、基本语…

【JVM-9】Java性能调优利器:jmap工具使用指南与应用案例

在Java应用程序的性能调优和故障排查中,jmap(Java Memory Map)是一个不可或缺的工具。它可以帮助开发者分析Java堆内存的使用情况,生成堆转储文件(Heap Dump),并查看内存中的对象分布。无论是内…

(二叉树)

我们今天就开始引进一个新的数据结构了:我们所熟知的:二叉树; 但是我们在引进二叉树之前我们先了解一下树; 树 树的概念和结构: 树是⼀种⾮线性的数据结构,它是由 n ( n>0 ) …

电脑如何访问手机文件?

手机和电脑已经深深融入了我们的日常生活,无时无刻不在为我们提供服务。除了电脑远程操控电脑外,我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么,如何使用电脑远程访问手机上的文件呢? 如何使用电脑访问手机文件…

ABP - 缓存模块(1)

ABP - 缓存模块(1) 1. 与 .NET Core 缓存的关系和差异2. Abp 缓存的使用2.1 常规使用2.2 非字符串类型的 Key2.3 批量操作 3. 额外功能 1. 与 .NET Core 缓存的关系和差异 ABP 框架中的缓存系统核心包是 Volo.Abp.Caching ,而对于分布式缓存…

【RAG落地利器】向量数据库Chroma入门教程

安装部署 官方有pip安装的方式,为了落地使用,我们还是采用Docker部署的方式,参考链接来自官方部署: https://cookbook.chromadb.dev/running/running-chroma/#docker-compose-cloned-repo 我们在命令终端运行: docker run -d --…

基于Python django的音乐用户偏好分析及可视化系统设计与实现

1.1 论文背景 随着信息技术的快速发展,在线音乐服务已成为日常生活的重要组成部分。QQ音乐,凭借其创新的音乐推荐算法和独特的社交特性,成功在竞争激烈的市场中获得一席之地。该平台的歌单文化和评论文化不仅满足了用户自尊和自我实现的需求…

以Python构建ONE FACE管理界面:从基础至进阶的实战探索

一、引言 1.1 研究背景与意义 在人工智能技术蓬勃发展的当下,面部识别技术凭借其独特优势,于安防、金融、智能终端等众多领域广泛应用。在安防领域,可助力监控系统精准识别潜在威胁人员,提升公共安全保障水平;金融行业中,实现刷脸支付、远程开户等便捷服务,优化用户体…

以单用户模式启动 Linux 的方法

注:本文为 “Linux 启动单用户模式” 相关文章合辑。 未整理去重。 以单用户模式启动 linux 的三种方法 作者: Magesh Maruthamuthu 译者: LCTT Xiaobin.Liu 2020-05-03 23:01 单用户模式,也被称为维护模式,超级用户…

【C++】size_t全面解析与深入拓展

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、什么是size_t?为什么需要size_t? 💯二、size_t的特性与用途1. size_t是无符号类型示例: 2. size_t的跨平台适应性示例对…

YOLOv9改进,YOLOv9检测头融合RFAConv卷积,适合目标检测、分割任务

摘要 空间注意力已广泛应用于提升卷积神经网络(CNN)的性能,但它存在一定的局限性。作者提出了一个新的视角,认为空间注意力机制本质上解决了卷积核参数共享的问题。然而,空间注意力生成的注意力图信息对于大尺寸卷积核来说是不足够的。因此,提出了一种新型的注意力机制—…

Mysql触发器(学习自用)

一、介绍 二、触发器语法 注意:拿取新的数据时用new,旧数据用old。

即现软著工具 - 让软著申请更高效

在软件著作权申请的过程中,开发者常常会遇到代码整理、统计和生成证明文件等繁琐且复杂的任务。为了解决这些问题,提高申请效率和成功率,给大家介绍一款工具:即现软著工具。 即现软著工具,能够快速整理软著申请的程序鉴…

Java Web开发高级——单元测试与集成测试

测试是软件开发的重要环节,确保代码质量和功能的正确性。在Spring Boot项目中,单元测试和集成测试是常用的两种测试类型: 单元测试:测试单个模块(如类或方法)是否按预期工作。集成测试:测试多个…

路径规划之启发式算法之二十八:候鸟优化算法(Migrating Birds Optimization, MBO)

候鸟优化算法(Migrating Birds Optimization, MBO)是一种基于群体智能的元启发式优化算法,其灵感来源于候鸟迁徙时的“V”字形飞行队列。这种队列结构能够有效减少能量消耗,同时提高飞行效率。MBO算法通过模拟候鸟的迁徙行为,利用群体间的协作和信息共享来优化问题的解。 …

Observability:最大化可观察性 AI 助手体验的 5 大提示(prompts)

作者:来自 Elastic Zoia_AUBRY 在过去三年担任客户工程师期间,我遇到了数百名客户,他们最常问的问题之一是:“我的数据在 Elastic 中;我该如何利用它获得最大优势?”。 如果这适用于你,那么本…

C# 委托和事件思维导图

思维导图 下载链接腾讯云盘 https://share.weiyun.com/fxBH9ESl

2024.ailx10的年终总结

已经工作7年啦,今年网络安全行业愈发寒冷,几乎所有友商都在做安全GPT,说实话,AI确实颠覆了传统的网络安全运营,以前需要安服处置告警,以后可能就不需要了,大家日子都不好过,越是简单…

机器学习(5):支持向量机

1 介绍 支持向量机(Support Vector Machine,简称 SVM)是一种监督学习算法,主要用于分类和回归问题。SVM 的核心思想是找到一个最优的超平面,将不同类别的数据分开。这个超平面不仅要能够正确分类数据,还要使…