使用多线程处理List数据
最近遇到了一个业务场景,需要对List中的数据逐个发起http请求(List中的数据各自独立,对执行顺序无要求),考虑到可以使用多线程加快处理速度。
封装了如下方法:
/// <summary>/// 多线程处理数据-无返回值/// </summary>/// <param name="list"></param>/// <param name="action">数据处理方法</param>/// <param name="threadCount">开启线程数量</param>/// <param name="waitFlag">是否等待全部结束</param>static void RunTask<T>(List<T> list, Action<T> action, int threadCount = 5, bool waitFlag = true){var queue = new ConcurrentQueue<T>(list);threadCount = Math.Min(threadCount, list.Count);Task[] tasks = new Task[threadCount];for (int i = 0; i < threadCount; i++){tasks[i] = Task.Run(() =>{while (queue.TryDequeue(out T t)){action(t);}});}if (waitFlag){Task.WaitAll(tasks);}}/// <summary>/// 多线程处理数据-有返回值/// </summary>/// <param name="list">待处理数据</param>/// <param name="func">数据处理方法</param>/// <param name="count">开启线程数量</param>static List<TReturn> RunTask<T, TReturn>(List<T> list, Func<T, TReturn> func, int threadCount = 5){var result = new ConcurrentBag<TReturn>();var queue = new ConcurrentQueue<T>(list);threadCount = Math.Min(threadCount, list.Count);var tasks = new Task[threadCount];for (int i = 0; i < threadCount; i++){tasks[i] = Task.Run(() =>{while (queue.TryDequeue(out T t)){result.Add(func(t));}});}Task.WaitAll(tasks);return result.ToList();}
使用示例:
public void DoSingle(User user, string param1, string param2){//HttpHelper.Get("http://xxxx/userid="+user.id);//doSomething();Console.WriteLine(user.Id + "-" + user.Name + "-" + param1 + "-" + param2);}public string DoSingle2(User user, string param1, string param2){//HttpHelper.Get("http://xxxx/userid="+user.id);//doSomething();Console.WriteLine(user.Id + "-" + user.Name + "-" + param1 + "-" + param2);return user.Id + "-666";}public class User{/// <summary>/// id/// </summary>public int Id { get; set; }/// <summary>/// 姓名/// </summary>public string Name { get; set; }}public void Test(){var list = new List<User> {new User { Id = 1, Name = "张三" },new User { Id = 2, Name = "李四" },new User { Id = 3, Name = "王五" }};RunTask(list, t => DoSingle(t, "参数1", "参数2"));var retList = RunTask(list, t => DoSingle2(t, "参数1", "参数2"));}
相关文章:
使用多线程处理List数据
最近遇到了一个业务场景,需要对List中的数据逐个发起http请求(List中的数据各自独立,对执行顺序无要求),考虑到可以使用多线程加快处理速度。 封装了如下方法: /// <summary>/// 多线程处理数据-无返回值/// </summary&…...
Elasticsearch--Python使用、Django/Flask集成
一、Python使用 from elasticsearch import Elasticsearchobj Elasticsearch() # 创建索引(Index) result obj.indices.create(indexuser, body{"userid":1,username:lqz},ignore400) # print(result) # 删除索引 # result obj.indices.de…...
pyspark将数据多次插入表的时候报错
代码 报错信息 py4j.protocol.Py4JJavaError: An error occurred while calling o129.sql. : org.apache.spark.sql.catalyst.parser.ParseException: mismatched input INSERT expecting <EOF>(line 12, pos 0) 原因 插入语句结束后没有加;结尾 把两个&am…...
Qt绘制饼状图
必须在MainWindow.h头文件开头放 #include <QtCharts> //必须这么设置 创建chart: void MainWindow::iniPiewChart() { //饼图初始化QChart *chart new QChart();chart->setTitle(" Piechart演示");chart->setAnimationOptions(QChar…...
Vue3 setup函数
一、setup函数介绍 setup函数是Vue3中全新的一个配置项,值为一个函数,是所有 Composition API 中“表演的舞台”。 我们在Vue2中用到的所有数据、方法,都需要配置在setup中。 这是我们在Vue2中的写法: 这是我们在Vue3 setup中的…...
Django(三、数据的增删改查、Django生命周期流程图)
文章目录 一、 基于ORM进行的CURDuser_list:作为主页使用路由文件urls.py配置如下:add.html:用于新增用户的数据页add页面视图函数如下:edit.html:修改数据的页面那么来总结一下上序所操作所用到的内容。 导入已存在的表其方式有两…...
Linux 部署Sentinel控制台
Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 1.版本选择 SpringCloudAlibaba SpringClo…...
服务器如何下载百度网盘数据
百度网盘作为镜像 国外用户传数据到我们服务器比较慢,但是传输百度网盘速度还是可以的。 这样我们就可以将百度网盘作为一个文件中转站。 但Linux系统下使用百度网盘有些麻烦,虽然百度网盘也有Linux版本,但服务器没开启图形界面,使用的是命令行。这个时候就得感谢开发者Ho…...
POJ 3254 Corn Fields 状态压缩DP(铺砖问题)
一、题目大意 我们要在N * M的田地里种植玉米,有如下限制条件: 1、对已经种植了玉米的位置,它的四个相邻位置都无法继续种植玉米。 2、题目中有说一些块无论如何,都无法种植玉米。 求所有种植玉米的方案数(不种植也…...
transformers安装避坑
1.4 下载rust编辑器 看到这里你肯定会疑惑了,我们不是要用python的吗? 这个我也不知道,你下了就对了,不然后面的transformers无法安装 因为是windows到官网选择推荐的下载方式https://www.rust-lang.org/tools/install。 执行文…...
牛客、赛码网OJ调试(全)
现在无论开发还是测试,面试的时候都需要考察代码能力。 从测试的职业发展来看,现在市场上对于纯功能测试的需求很少,招聘方均要求面试者一方面具备测试基础能力,也要求有点代码能力。 对于测试来说,除了测试开发&#…...
【CSS】全局声明引入自定义字体
以下用vue项目为例,其他的也是类似! 在Vue.js中可以使用全局样式表来定义字体。通常,可以在项目中的主样式表中定义全局字体,然后确保该样式表在整个应用程序中被引入。 以下是一般的步骤: 在项目中创建一个全局样式…...
「Flask」路由+视图函数
路由 路由的作用是将 HTTP 请求的 URL 路径映射到相应的函数处理程序。这样我们在开发过程中,就能将不同的 URL 路径与相应的函数处理程序关联起来,从而实现对 Web 应用的灵活控制。 路由可以分为静态路由和动态路由。两者主要是在形式上有一些区别&am…...
信息系统项目管理师 教材目录、考试大纲、考情
文章目录 考情考试大纲第1章 信息化发展第2章 信息技术发展第3章 信息系统治理第4章 信息系统管理第5章 信息系统工程第6章 项目管理概论第7章 项目立项管理第8章 项目整合管理第9章 项目范围管理272第10章 项目进度管理297第11章 项目成本管理334第12章 项目质量管理358第13章…...
python线性回归实现
import random import torch# ①根据带有噪声的线性模型构造一个人造数据集。 使用线性模型参数w[2,−3.4] b4.2和噪声项ϵ生成数据集及其标签 def synthetic_data(w, b, num_examples):"""生成 y Xw b 噪声。"""# 生成均值为0,标…...
【JavaEESpring】认识Spring
认识Spring 1. 什么是框架2. SpringBoot 介绍2.1 Spring 的介绍2.2 SpringBoot 1. 什么是框架 框架(Framework) ,意思是框架、机制、准则。通俗的来讲: 框架是实现某种功能的半成品, 他提供了⼀些常⽤的⼯具类, 我们在框架的基础上, 可以更加⾼效的进⾏开发 后端框…...
Rust逆向学习 (5)
文章目录 Reverse for Vecvec! 与 添加元素元素访问元素遍历枚举数组弹出最后一个元素——pop 总结 本文将对Rust中的通用集合类型——动态数组 Vec进行学习,对应参考书中的第8章。 Reverse for Vec Vec是Rust中的动态数据结构,与C中的vector功能类似。…...
89.STL-函数对象的使用(仿函数)
目录 1.什么是函数对象 2.仿函数示例 3.代码示例 1.什么是函数对象 函数对象是C中的一种编程概念,也称为函数符或仿函数。其实就是重载“()”操作符,使得类对象可以像函数那样调用。 分类:假定某个类有一个重载的operator(),而且重载的oper…...
文件管理技巧:按文件容量大小分类,自动移动至目标文件夹的方法
按文件容量大小分类可以帮助快速识别和筛选出不同大小的文件。这样做有很多好处。首先,可以轻松地查找和访问特定大小的文件,提高工作效率。其次,通过将不同大小的文件分类,可以更好地了解和掌控文件的使用情况,避免存…...
[架构之路-246]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:获取、分析、定义、验证
目录 前言: 架构师为什么需要了解需求分析 一、需求工程概述 1.1 概述 1.2 需求工程的两大部分 (1)需求开发:系统工程师的职责、目标系统开发角度 (2)需求管理:项目管理者的职责、项目管…...
查公司法人信息,别踩这3个坑
查公司法人信息,很多人都踩过坑——要么信息分散得切换5平台,要么解读不了风险,要么用了非合规工具泄露隐私。我之前帮朋友做尽调时就遇到过,查了一下午才凑齐信息,还差点漏掉法人关联的失信记录。其实用对方法和工具&…...
SpringBoot3.0.0实战:5分钟搞定SpringDoc与Knife4j的完美集成(含中文UI配置)
SpringBoot3.0极速集成SpringDoc与Knife4j:中文文档界面实战指南 在微服务架构盛行的当下,API文档的规范化和可视化已成为项目开发中不可或缺的一环。对于使用SpringBoot3.0的Java开发者来说,SpringDoc与Knife4j的组合堪称API文档工具链中的黄…...
第6章 黎曼流形优化与几何方法
第6章 黎曼流形优化与几何方法 6.1 黎曼几何基础 6.1.1 复Stiefel流形与单位模流形(Unit-Modulus Manifold)度量 6.1.2 指数映射(Exponential Mapping)与平行移动(Parallel Transport) 6.1.3 测…...
双目视觉实战:如何用OpenCV和Python实现简易3D建模(附完整代码)
双目视觉实战:如何用OpenCV和Python实现简易3D建模(附完整代码) 当你第一次看到3D电影中跃然眼前的画面,或是用手机扫描物体生成三维模型时,是否好奇过这背后的技术原理?双目视觉技术正是实现这些酷炫效果的…...
离线知识问答:OpenClaw本地部署百川2-13B-4bits量化模型+私有文档库
离线知识问答:OpenClaw本地部署百川2-13B-4bits量化模型私有文档库 1. 为什么选择本地化知识问答方案 去年我在处理公司内部技术文档时遇到一个典型痛点:每次查询API规范或架构设计文档,要么需要翻找十几层文件夹,要么得在公共知…...
EnOcean BLE设备轻量级解析库设计与实现
1. 项目概述EnOceanBleDevices 是一个面向嵌入式平台的轻量级 BLE 协议栈扩展库,专为集成 EnOcean 自供电 BLE 设备而设计。其核心目标并非替代标准 BLE 协议栈(如 ESP-IDF 的 NimBLE 或 Bluedroid),而是构建在底层 BLE 扫描能力之…...
5步掌握抖音无水印下载终极指南:从零到批量处理高效方案
5步掌握抖音无水印下载终极指南:从零到批量处理高效方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…...
基于VISSIM的城市道路交叉口信号控制研究
文章目录一、摘要二、交通控制的基本理论三、定时控制方案分析五、效果图源码获取一、摘要 随着全国机动车保有量的上升,城市道路的拥堵问题日益严重,优化道路交叉口信号控制是解决拥堵问题的关键。本文介绍了城市道路交叉口信号控制的研究现状…...
RAG效果调优清单(命中率提升3倍)
文章目录 🚀 RAG效果调优清单(命中率提升3倍) 🧠 一、核心结论(先记住) 🔥 二、一级优化(必须做,提升最大) 1️⃣ Chunk策略(最重要❗) ❌ 常见错误 ✅ 最优参数 🧠 进阶技巧(关键!) 2️⃣ Embedding模型选择(决定下限) ❌ 错误 ✅ 推荐(中文) 3️⃣ T…...
loadtest WebSocket测试全攻略:实时应用的性能验证方法
loadtest WebSocket测试全攻略:实时应用的性能验证方法 【免费下载链接】loadtest Runs a load test on the selected URL. Fast and easy to use. Can be integrated in your own workflow using the API. 项目地址: https://gitcode.com/gh_mirrors/lo/loadtest…...
