Python之线程池设计实战

案例

10000条数据,要先下载,然后需要从并发量支持一秒20次的识别接口通过,最近将结果写入excel中,如果用python完成,如何实现,线程池大小设多少合适,线程池大小在哪用合适

针对这个需求,可以使用Python的多线程和Excel处理库来完成。以下是一个基本的实现思路:

  1. 下载数据:使用多线程同时下载所有数据,并保存到本地文件中。
  2. 并发识别:使用线程池或协程池并发地调用识别接口,每秒最多支持20次请求,并将识别结果保存到内存中。
  3. 写入Excel:将所有识别结果写入Excel文件中。

在实现过程中,需要注意以下几点:

  1. 线程池大小的设定:可以根据系统资源和性能测试来选择合适的线程池大小。一般来说,线程池大小可以设置为CPU核心数的两倍左右,但也要考虑到系统内存等资源限制。如果使用协程池,则不需要考虑线程池大小,而是通过协程数量来控制并发度。
  2. 并发识别的限制:要确保每秒最多只发送20次请求,避免超出识别接口的限制导致识别失败或被封禁。
  3. 多线程编程的注意事项:要注意线程安全、异常处理、日志记录等问题,避免出现死锁、竞争等问题。

以下是一个基本的示例代码:

import requests
import openpyxl
from concurrent.futures import ThreadPoolExecutor
import timedef download_data(url, save_path):response = requests.get(url)with open(save_path, 'wb') as f:f.write(response.content)def recognize_data(data):# 假设这里使用requests库调用识别接口response = requests.post('识别接口URL', data=data)return response.json()def write_to_excel(result, save_path):wb = openpyxl.Workbook()ws = wb.activerow = 1for r in result:ws.cell(row=row, column=1, value=r['data'])ws.cell(row=row, column=2, value=r['result'])row += 1wb.save(save_path)def main():# 下载数据urls = [...] # 存放下载数据的URL列表save_paths = [...] # 存放数据保存路径的列表with ThreadPoolExecutor() as pool:for url, save_path in zip(urls, save_paths):pool.submit(download_data, url, save_path)# 并发识别result = []with ThreadPoolExecutor(max_workers=20) as pool:for save_path in save_paths:with open(save_path, 'rb') as f:data = f.read()future = pool.submit(recognize_data, data)while True:time.sleep(0.05)if future.done():result.append(future.result())break# 写入Excelwrite_to_excel(result, 'result.xlsx')if __name__ == '__main__':main()

在这个示例中,我们使用了线程池来并发下载数据和识别任务,并且在识别任务时限制了每秒最多发送20次请求。在识别任务中,我们使用了future.done()方法来判断任务是否完成,避免了阻塞等待线程的问题。最后,我们将所有识别结果写入Excel文件中。

需要注意的是,以上示例只是一个基本的框架,具体的实现细节还需要根据具体的业务需求进行调整和优化。例如,在并发下载数据时,可以使用多进程来提升下载速度;在识别任务时,可以使用信号量来限制并发数量等。同时,对于线程池大小的设定,也需要根据实际情况进行调整和优化,以达到更好的性能和稳定性。

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

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

相关文章

Hive生产调优介绍

1.Fetch抓取 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算。例如:SELECT * FROM employees;在这种情况下,Hive可以简单地读取employee对应的存储目录下的文件,然后输出查询结果到控制台。 在hive-default.xml…

云卷云舒:构建业务型电信智能运维方法

1 引言 智能运维(AIOps-Algorithmic IT Operations基于算法的IT运维)是人工智能技术在IT运维领域的运用,引用Gartner 的报告的一段话“未来几年,将近50%的企业将会在他们的业务和IT运维方面采用AIOps,远远高于今天的10…

Cloud-Platform 学习——Part6 WebClient异步非阻塞请求工具

参考: https://zhuanlan.zhihu.com/p/370935458?utm_id0 - 知乎专栏在 SpringBoot 中从 RestTemplate 过渡到 WebClient:详细指南-CSDN博客 多年来,Spring 框架的 RestTemplate 一直是客户端 HTTP 访问的首选解决方案,它提供同步…

php的laravel权限问题

1.这是我新建的一个路由,然后就是说每新建一个路由都要给他开个权限!!!! 2.这个是组内大佬写的: 我们也可以在里面加,也可以在浏览器的页面手动加(对我们新手来说还是浏览器的页面…

matlab导出高清图片,须经修改后放入latex(例如添加文字说明,matlab画图不易操作)

一、背景 我们在写文章时,使用matlab画图后,如果不需要对图片进行额外修改或调整,例如添加文字说明,即可直接从matlab导出eps格式图片,然后插入到latex使用。 通常latex添加图片,是需要eps格式的。 但很…

左耳朵耗子:程序员练级攻略

在一个小公司,天天 CRUD,程序员如何练级,不断提升自己? 在大公司,就是个螺丝钉,天天就是自己那一亩三分地,如何不断提升自己,不被淘汰? 第一步建立自己的学习实验室 在…

微服务实战系列之Dubbo(下)

前言 眼看着2023即将走远,心里想着似乎还有啥,需要再跟各位盆友叨叨。这不说曹操,曹操就来了。趁着上一篇Dubbo博文的余温尚在,博主兴匆匆地“赶制”了Dubbo的下集,以飨读者。 上一篇博主依然从Dubbo的内核出发&#…

UTF-8编码:打破字符编码的国界

UTF-8编码:打破字符编码的国界 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同探讨编程世界中一项至关重要的技术——“UTF-…

原型链补充

1.什么是原型对象 函数的独有属性,他用prototype来表示,可以在函数的prototype上挂载一些公用的属性和方法,供实例化对象来访问。 2.__proto__属性 这个属性每一个对象都有,实例化对象就是通过这个属性,来访问原型对象上的属性和方法的。 3.三者之间的关系 1.在构造函数的原型…

PTA——计算火车运行时间

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。 输入格式: 输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23&#xff0…

Vagrant使用教程

vmware下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html VirtualBox下载地址:https://www.virtualbox.org/wiki/Downloads Vagrant下载地址:https://developer.hashicorp.com/vagrant/install#…

基于智能手机的行人惯性追踪数据集模型与部署

论文总结 这篇《 Smartphone-based Pedestrian Inertial Tracking: Dataset, Model, and Deployment 》论文介绍了一种基于智能手机惯性测量单元(IMU)的行人追踪和定位系统。主要内容和贡献如下: 数据集和实验设计:作者开发了一…

logback中的logger和root

1. logger和root的区别 在logback中,logger和root logger都是日志记录器(logger)的实例,用于控制日志的输出级别。它们之间的区别在于它们的作用范围和默认配置。 logger是应用程序中的具体组件或类的日志记录器。每个logger都可…

鸿蒙 DevEco Studio 3.1 入门指南

本文主要记录开发者入门,从软件安装到项目运行,以及后续的学习 1,配置开发环境 1.1 下载安装包 官网下载链接 点击立即下载找到对应版版本 下载完成,按照提示默认安装即可 1.2 下载SDK及工具链 运行已安装的DevEco Studio&…

SPI机制原理+使用

一、概述 SPI全称(Service Provider Interface),是JDK内置的一种服务提供发现机制;SPI机制提供了组件发现和注册方式,可以为应用程序提供灵活的插件机制, 主要原理:接口 反射 配置文件。 二、…

Rust学习笔记002: 猜字游戏

version0.1 // 导入标准库中的 io 模块,它包含了输入输出相关的功能 use std::io;// 程序的入口点 fn main() {println!("Guess the number!");println!("Please input your guess.");// 创建一个可变的字符串变量 guess,用于存储用…

【Spring Security】快速入门之案例实操

目录 一、简介 1、什么是安全框架 2、主流的安全框架 3、为什么使用Spring Security 二、引言 1、什么是Spring Security 2、Spring Security工作原理 3、特点 三、快速入门 1、引入依赖 2、配置 3、启动测试 4、配置自定义账号密码 四、Web安全配置类 1.HttpSe…

一步一步写线程之三多线程设计开发

一、多线程开发 多线程开发在实际应用中是非常多的。正如前面分析所说,只要写一个线程,就可以认为是多线程开发。多线程开发没有最优,只有在指定场景下的最合适。没有任何一个模型可以包打所有的场景,所以在网上经常可以看到一些…

智安网络|实现安全与网络功能一体化:SASE的全新安全策略

随着企业信息化和数字化程度的不断提升,网络安全面临着前所未有的挑战。传统的网络安全模式已经无法满足日益复杂的安全需求。在这一背景下,安全访问服务边缘(SASE)崭露头角,并逐渐成为新一代网络安全架构的关键概念。…

云上安全责任共担模型

对于传统自建物理服务器模式,用户需要承担所有的安全责任,负责从物理基础设施到上层应用的所有层面的安全体系构建。 云服务器的安全责任确实与物理服务器不同,云上的安全性是一种责任共担模式,其中云服务器ECS的安全责任需要你&…