当前位置: 首页 > news >正文

多进程(python)

参考: https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376
个人封装的python多进程处理类,跑满CPU,优化性能

概念

进程: 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。

线程:有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。

总结一下就是,多任务的实现有3种方式:

多进程模式;
多线程模式;
多进程+多线程模式。

概念小结

线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。
多进程和多线程的程序涉及到同步、数据共享的问题,编写起来更复杂。

多进程(multiprocessing)

from multiprocessing import Poolfrom tqdm import tqdmclass SelfMultiple:def __init__(self, func, process: int, params: list, custom_callback=False, callback=None):print("==>init customized multiple class")self.func = funcself.params = paramsself.process = processself.custom_callback = custom_callbackself.callback = callbackdef run(self):self.pool = Pool(processes=self.process)if self.custom_callback == False:print("==>undefined self callback")pbar = tqdm(total=len(self.params))def update(*a):pbar.update()for param in self.params:result = self.pool.apply_async(self.func, param, callback=update)result.get()else:print("==>defined self callback")print(f"==>executing || {self.func}")for param in self.params:result = self.pool.apply_async(self.func, param, callback=self.callback)result.get()self.pool.close()self.pool.join()

如何调用呢

def add(x, y):print(f"adding || {x} + {y}")return x + yif __name__ == "__main__":params = [(1, 2), (3, 4), (5, 6), (7, 8)]multiple_tool = SelfMultiple(add, process=10, params=params, custom_callback=False)multiple_tool.run()

相关文章:

多进程(python)

参考: https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376 个人封装的python多进程处理类,跑满CPU,优化性能 概念 进程: 对于操作系统来说,一个任务就是一个进程(Process),…...

利用Kali工具进行信息收集(35)

预备知识 Kali是一款开源的安全漏洞检测工具,是专业用于渗透测试的Linux操作系统,由BackTrack发展而来,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真…...

《程序员面试金典(第6版)》 面试题 08.11. 硬币(动态规划,组合问题,C++)

题目描述 硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示例1: 输入: n 5 输出:2 解释: 有两种方式可以凑成总金额: 55 511111 示例2: 输…...

实体商家做抖音运营如何做矩阵?

商家实体门店如何做好短视频矩阵?这是一个值得深入探讨的问题。在当今的数字化时代,短视频成为越来越多企业吸引用户、提高曝光度的一种重要方式,实体店也不例外。在本文中,我们将提供一些实用的建议,帮助实体店如何做…...

java 双列集合Map 万字详解

目录 一、前言 二、概述 三、特点 四、常用方法 1. V put(K key, V value) : Δ代码演示 : 2. V get(Object key) : Δ代码演示 : 3. V remove(Object key) : Δ代码演示 : 4. int size() : Δ代码演示 : 5. default V replace(K key, V value) : Δ代码演示 : 6. bo…...

【数据结构】二叉树<遍历>

【二叉树遍历】|-前序-中序-后序-层序-|<二叉树的遍历>1.前序遍历【递归】2.中序遍历【递归】3.后序遍历【递归】4.层序遍历【非递归】4.1判断是否是完全二叉树<二叉树的遍历> 在学习二叉树遍历之前我们先了解下二叉树的概念。 二叉树是&#xff1a; 1.空树 2.非空…...

linux查看硬件信息

dmidecode用于在linux下获取硬件信息&#xff0c;遵循SMBIOS/DMI标准&#xff0c;可获取包括BIOS、系统、主板、处理器、内存、缓存等等硬件信息 1、查看CPU信息cat /proc/cpuinfo、lscpu 型号&#xff1a;cat /proc/cpuinfo|grep name|cut -f2 -d:|uniq -c 物理核&#xff1a…...

吐血整理,互联网大厂最常见的 1120 道 Java 面试题(带答案)整理

前言 作为一个 Java 程序员&#xff0c;你平时总是陷在业务开发里&#xff0c;每天噼里啪啦忙敲着代码&#xff0c;上到系统开发&#xff0c;下到 Bug 修改&#xff0c;你感觉自己无所不能。然而偶尔的一次聚会&#xff0c;你听说和自己一起出道的同学早已经年薪 50 万&#x…...

RabbitMQ如何避免消息丢失

目录1.生产者没有成功把消息发送到MQ2.RabbitMQ接收到消息之后丢失了消息3.消费者弄丢了消息前言 首先明确一点一条消息的传送流程&#xff1a;生产者->MQ->消费者 我们根据这三个依次讨论 1.生产者没有成功把消息发送到MQ 丢失的原因&#xff1a;因为网络传输的不稳定…...

做算法题的正确姿势(不断更新)

不停的反思自己&#xff0c;总结建议 做一道算法题&#xff0c;不能去死磕。 如果看一道题&#xff0c;半小时内&#xff0c;没有清晰的思路&#xff0c;就看题解&#xff01;&#xff01;&#xff01;你可能觉得你有点思路&#xff0c;就往里死钻&#xff0c;结果可能就像进…...

p85 CTF夺旗-JAVA考点反编译XXE反序列化

数据来源 图片来源 Java 常考点及出题思路 考点技术&#xff1a;xxe&#xff0c;spel 表达式&#xff0c;反序列化&#xff0c;文件安全&#xff0c;最新框架插件漏洞等 设法间接给出源码或相关配置提示文件&#xff0c;间接性源码或直接源码体现等形式 https://www.cnblog…...

FastJson——JSO字符串与对象的相互转化

一、FastJson介绍 ​ Fastjson是阿里巴巴的开源SON解析库它可以解析JSON格式的字符串&#xff0c;支持将java Bean序列化为ISON字符串&#xff0c;也可以从JSON字符串反序列化到JavaBean。 Fastjson的优点 速度快 fastjson相对其他JSON库的特点是快&#xff0c;从2011年fastj…...

《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++

题目描述 有重复字符串的排列组合。编写一种方法&#xff0c;计算某字符串的所有排列组合。 示例1: 输入&#xff1a;S “qqe” 输出&#xff1a;[“eqq”,“qeq”,“qqe”] 示例2: 输入&#xff1a;S “ab” 输出&#xff1a;[“ab”, “ba”] 提示: 字符都是英文字母。…...

k8s API限流——server级别整体限流和客户端限流

1. 背景 为了防止突发流量影响apiserver可用性&#xff0c;k8s支持多种限流配置&#xff0c;包括&#xff1a; MaxInFlightLimit&#xff0c;server级别整体限流Client限流EventRateLimit, 限制eventAPF&#xff0c;更细力度的限制配置 1.1 MaxInFlightLimit限流 apiserver…...

在华为做了三年软件测试被裁了,我该怎么办

近年来&#xff0c;随着经济环境的变化和企业战略的调整&#xff0c;员工被裁员的情况变得越来越普遍。无论是因为企业经营困难还是因为业务调整&#xff0c;员工们都可能面临被裁员的风险。如果你也遇到了这样的情况&#xff0c;那么你应该怎么办呢&#xff1f; 首先&#xf…...

Spring cloud 限流的多种方式

在频繁的网络请求时&#xff0c;服务有时候也会受到很大的压力&#xff0c;尤其是那种网络攻击&#xff0c;非法的。这样的情形有时候需要作一些限制。本文主要介绍了两种限流方法&#xff0c;感兴趣的可以了解一下 目录 一、实战基于 Spring cloud Gateway 的限流 二、基于阿…...

Linux命令·top

top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器。下面详细介绍它的使用方法。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止…...

springmvc之系列文章

springmvc之编程步骤 springmvc初始化过程 用WebServlet和WebFilter干掉web.xml 没有web.xml怎么写web程序 一次GET请求在springmvc中是的处理流程 springMVC的handler都有哪些类型 springmvc主要组件简单介绍 springmvc 的Servlet WebApplicationContext springmvc 的…...

Matlab实现深度学习(附上完整仿真源码)

文章目录简单案例完整仿真代码下载简单案例 深度学习是一种能够自动学习和提取数据特征的机器学习方法&#xff0c;它已经在图像识别、语音识别、自然语言处理等领域取得了显著的成果。而Matlab作为一个强大的数学计算工具&#xff0c;也提供了丰富的深度学习工具箱&#xff0…...

我的谷歌书签

Form 表单 | Element Plusa Vue 3 based component library for designers and developershttps://element-plus.gitee.io/zh-CN/component/form.html#%E5%AF%B9%E9%BD%90%E6%96%B9%E5%BC%8F three.js exampleshttp://www.yanhuangxueyuan.com/threejs/examples/#software_geo…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...