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

Ansible的debug模块介绍,fact变量采集和缓存相关操作演示

目录

一.debug模块的使用方法

1.帮助文档给出的示例

2.主要用到的参数

(1)msg:主要用这个参数来指定要输出的信息

(2)var:打印指定的变量,一般是通过register注册了的变量

(3)verbosity:调试级别,默认是0表示全部显示

3.输出信息详解

4.在debug中使用when做条件判断

(1)通过rc的结果做判断

(2)通过是否failed做判断

二.fact变量

1.setup简单用法演示

(1)通过filter进行过滤

(2)--tree将信息输出到指定目录

2.手动设置fact

3.使用set_fact模块定义变量

4.手动采集变量

三.fact缓存

1.json方式

2.redis方式

3.memcached方式基本已弃用


 

一.debug模块的使用方法

ansible上playbook的debug是一个常用的调试模块,主要用于在playbook执行(调试、引用变量)过程输出一些关键信息,并且可以对这些关键信息进行一定的格式化输出和条件判断

1.帮助文档给出的示例

EXAMPLES:
​
# Example that prints the loopback address and gateway for each host
- debug:msg: System {{ inventory_hostname }} has uuid {{ ansible_product_uuid }}
​
- debug:msg: System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}when: ansible_default_ipv4.gateway is defined
​
# Example that prints return information from the previous task
- shell: /usr/bin/uptimeregister: result
​
- debug:var: resultverbosity: 2
​
- name: Display all variables/facts known for a hostdebug:var: hostvars[inventory_hostname]verbosity: 4
​
# Example that prints two lines of messages, but only if there is an environment value set
- debug:msg:- "Provisioning based on YOUR_KEY which is: {{ lookup('env', 'YOUR_KEY') }}"- "These servers were built using the password of '{{ password_used }}'. Please retain this for later use."

2.主要用到的参数

(1)msg:主要用这个参数来指定要输出的信息

演示效果

[root@main ~]# cat iduser.yaml 
---
- name: is su existhosts: webserverstasks:- name: test sushell: id suregister: suignore_errors: yes- name: echo itdebug:msg: "用户存在"[root@main ~]# ansible-playbook iduser.yaml 
​
PLAY [is su exist] ******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
​
TASK [test su] **********************************************************************************************************************************
changed: [servera]
​
TASK [echo it] **********************************************************************************************************************************
ok: [servera] => {"msg": "用户存在"
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

(2)var:打印指定的变量,一般是通过register注册了的变量

演示效果

[root@main ~]# cat iduser.yaml 
---
- name: is su existhosts: serveratasks:- name: test sushell: id suregister: suignore_errors: yes- name: echo itdebug:var: su     #打印前面已经注册了的“su”变量
​
[root@main ~]# ansible-playbook iduser.yaml 
​
PLAY [is su exist] ******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
​
TASK [test su] **********************************************************************************************************************************
changed: [servera]
​
TASK [echo it] **********************************************************************************************************************************
ok: [servera] => {"su": {"changed": true, "cmd": "id su", "delta": "0:00:00.002850", "end": "2023-10-19 14:12:43.406662", "failed": false, "rc": 0, "start": "2023-10-19 14:12:43.403812", "stderr": "", "stderr_lines": [], "stdout": "uid=1000(su) gid=1000(su) groups=1000(su)", "stdout_lines": ["uid=1000(su) gid=1000(su) groups=1000(su)"]}
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

(3)verbosity:调试级别,默认是0表示全部显示

3.输出信息详解

以下面代码段为例:

"su":表示变量,在输出信息中它是一个字典类型

changed:根据此值来判断是否发生了状态改变

cmd:过程中调用的命令

failed:是否运行失败

rc:返回值,为0成功,非0失败或异常

stderr:出现异常时会在这显示错误信息

stderr_lines:以行分割的格式输出错误信息

stdout:运行成功会在此处输出返回结果

stdout_lines:以行分割的格式输出结果

ok: [servera] => {"su": {"changed": true, "cmd": "id su", "delta": "0:00:00.002850", "end": "2023-10-19 14:12:43.406662", "failed": false, "rc": 0, "start": "2023-10-19 14:12:43.403812", "stderr": "", "stderr_lines": [], "stdout": "uid=1000(su) gid=1000(su) groups=1000(su)", "stdout_lines": ["uid=1000(su) gid=1000(su) groups=1000(su)"]}
}

4.在debug中使用when做条件判断

(1)通过rc的结果做判断

[root@main ~]# cat iduser.yaml 
---
- name: is su existhosts: serveratasks:- name: test sushell: id suregister: suignore_errors: yes- name: echo itdebug:msg: "用户存在"when: su.rc==0        #当返回值为0时才输出msg

(2)通过是否failed做判断

[root@main ~]# cat iduser.yaml 
---
- name: is su existhosts: serveratasks:- name: test sushell: id suregister: suignore_errors: yes- name: echo itdebug:msg: "用户存在"#when: su.rc==0when: su is not failed      #当su变量的结果不失败时才输出
[root@main ~]# ansible-playbook iduser.yaml 
​
PLAY [is su exist] ******************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
​
TASK [test su] **********************************************************************************************************************************
changed: [servera]
​
TASK [echo it] **********************************************************************************************************************************
ok: [servera] => {"msg": "用户存在"
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​

二.fact变量

setup用于获取受管节点的详细信息(硬盘、IP、cpu等信息),可以将信息作为变量在playbook中引用,setup依赖fact进行获取信息

EXAMPLES:
​
# Display facts from all hosts and store them indexed by I(hostname) at C(/tmp/facts).
# ansible all -m setup --tree /tmp/facts
​
# Display only facts regarding memory found by ansible on all hosts and output them.
# ansible all -m setup -a 'filter=ansible_*_mb'
​
# Display only facts returned by facter.
# ansible all -m setup -a 'filter=facter_*'
​
# Collect only facts returned by facter.
# ansible all -m setup -a 'gather_subset=!all,!any,facter'
​
- name: Collect only facts returned by factersetup:gather_subset:- '!all'- '!any'- facter

1.setup简单用法演示

(1)命令行通过filter进行过滤

[root@main ~]# ansible servera -m setup -a 'filter=ansible_*_ipv4'
servera | SUCCESS => {"ansible_facts": {"ansible_default_ipv4": {"address": "192.168.2.131", "alias": "ens33", "broadcast": "192.168.2.255", "gateway": "192.168.2.1", "interface": "ens33", "macaddress": "00:0c:29:bc:03:89", "mtu": 1500, "netmask": "255.255.255.0", "network": "192.168.2.0", "type": "ether"}, "discovered_interpreter_python": "/usr/bin/python"}, "changed": false
}

(2)--tree将信息输出到指定目录

[root@main ~]# ansible servera -m setup -a 'filter=ansible_*_mb' --tree /root/facts
​
[root@main ~]# cat facts/servera 
{"ansible_facts": {"ansible_memfree_mb": 5327, "ansible_memory_mb": {"nocache": {"free": 5510, "used": 338}, "real": {"free": 5327, "total": 5848, "used": 521}, "swap": {"cached": 0, "free": 2047, "total": 2047, "used": 0}}, "ansible_memtotal_mb": 5848, "ansible_swapfree_mb": 2047, "ansible_swaptotal_mb": 2047, "discovered_interpreter_python": "/usr/bin/python"}, "changed": false}

2.手动设置fact

可以为某写主机手动定制fact,称其为本地fact,将管理节点定义好的fact文件传输给需要定制fact的节点,定制的fact默认存放在受管节点的/etc/ansible/facts.d目录下,

示例:为server节点自定义一个fact,使用这个fact启动servera上的httpd服务,此示例主要用到三个文件(cus.fact、afact.yaml、useafact.yaml),都放在同一目录下

[root@main ~]# cat cus.fact      #在管理节点定义好fact文件
[su]
mypkg=httpd
myser=httpd
state=started
​
[root@main ~]# cat afact.yaml   
#定义yaml文件,在受管节点创建/etc/ansible/facts.d目录,将fact文件拷贝至这个目录
---
- hosts: serveravars:remote_dir: /etc/ansible/facts.dfacts_file: cus.facttasks:- name: create remote_dir in serverafile:state: directoryrecurse: yespath: "{{ remote_dir }}"- name: copy local cus.factcopy:src: "{{ facts_file }}"dest: "{{ remote_dir }}"
​
[root@main ~]# ansible servera -m setup -a 'filter="ansible_local"'
#成功在servera上过滤出本地fact
servera | SUCCESS => {"ansible_facts": {"ansible_local": {"cus": {"su": {"mypkg": "httpd", "myser": "httpd", "state": "started"}}}, "discovered_interpreter_python": "/usr/bin/python"}, "changed": false
}
​
[root@main ~]# cat useafact.yaml   #为servera定义yaml文件引用其下的fact进行启动httpd
---
- hosts: serveratasks:- name: using servera local fact to start httpdservice:name: "{{ ansible_facts.ansible_local.cus.su.myser }}"#引用方式较长(ansible的facts.本地的.fact文件.fact内的字段名)state: "{{ ansible_facts.ansible_local.cus.su.state }}"
​
[root@main ~]# ansible-playbook useafact.yaml
​
PLAY [servera] **********************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
​
TASK [using servera local fact to start httpd] **************************************************************************************************
changed: [servera]
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​
[root@main ~]# ansible servera -m shell -a 'systemctl status httpd | grep Active'
#启动成功
servera | CHANGED | rc=0 >>Active: active (running) since Thu 2023-10-19 15:15:09 CST; 5s ago

3.使用set_fact模块定义变量

set_fact用于自定义facts,从而通过template或作为变量在playbook中被引用,set_fact定义的变量只能在此playbook中使用有效

EXAMPLES:
​
# Example setting host facts using key=value pairs, note that this always creates strings or booleans
- set_fact: one_fact="something" other_fact="{{ local_var }}"
​
# Example setting host facts using complex arguments
- set_fact:one_fact: somethingother_fact: "{{ local_var * 2 }}"another_fact: "{{ some_registered_var.results | map(attribute='ansible_facts.some_fact') | list }}"
​
# Example setting facts so that they will be persisted in the fact cache
- set_fact:one_fact: somethingother_fact: "{{ local_var * 2 }}"cacheable: yes
​
# As of Ansible 1.8, Ansible will convert boolean strings ('true', 'false', 'yes', 'no')
# to proper boolean values when using the key=value syntax, however it is still
# recommended that booleans be set using the complex argument style:
- set_fact:one_fact: yesother_fact: no

示例:通过set_fact计算进程使用内存的情况,这个计算结果也可以在playbook中引用

[root@main ~]# ansible servera -m setup -a 'filter="ansible_memtotal_mb"'
servera | SUCCESS => {"ansible_facts": {"ansible_memtotal_mb": 5848,     #先过滤一下看参数是否存在"discovered_interpreter_python": "/usr/bin/python"}, "changed": false
}
​
[root@main ~]# cat initfree.yaml 
---
- hosts: serveratasks:- name: cal pool sizeset_fact:      #定义一个变量为这个计算结果pool_size: "{{ ansible_memtotal_mb / 2 | int}}"- debug:var: pool_size  #输出这个变量
​
[root@main ~]# ansible-playbook initfree.yaml
​
PLAY [servera] **********************************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
​
TASK [cal pool size] ****************************************************************************************************************************
ok: [servera]
​
TASK [debug] ************************************************************************************************************************************
ok: [servera] => {"pool_size": "2924.0"
}
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

4.手动采集变量

运行playbook时,ansible会先ssh到受管节点去采集fact,如果收集信息过多过大会影响执行速度和效率,可以选择关闭采集或先关闭采集完成任务再重新采集

#显式采集行为
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]

示例:上述情况下,我们可以使用gather_facts显式关闭fact采集,然后执行完任务再重新采集facts

[root@main ~]# cat nogather.yaml 
---
- hosts: serveragather_facts: falsetasks:- name: debug thisdebug: msg="hello"- name: wait for 10wait_for:timeout: 6- name: regather factssetup:gather_subset: all  #参考EXAMPLES
​
[root@main ~]# ansible-playbook nogather.yaml 
​
PLAY [servera] **********************************************************************************************************************************
​
TASK [debug this] *******************************************************************************************************************************
ok: [servera] => {"msg": "hello"
}
​
TASK [wait for 10] ******************************************************************************************************************************
ok: [servera]
​
TASK [regather facts] ***************************************************************************************************************************
ok: [servera]
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

三.fact缓存

在playbook中引入fact时可以设置fact缓存,目前以是json、redis、memcached三种方式,以下是需要修改的ansible.cfg的defaults部分参数

  • gathering

是否开启fact支持三个选项:smart(默认采集facts,facts已存在时不采集,即缓存),implicit(默认采集facts,可以使用"gather_facts: false"来禁止采集),explicit(默认不采集,可以使用"gather_facts: true"来假期采集)

  • fact_caching_timeout

缓存时间,秒为单位

  • fact_caching

缓存方式,jsonfile,redis,memcached

  • fact_caching_connection

指定fact缓存的json文件位置,若没有会自动创建

1.json方式

此方式下,ansible会将fact写入控制主机的文件中

#在ansible.cfg配置文件的defaults模块加这些参数
gathering=smart
fact_caching_timeout=86400
fact_caching=jsonfile
fact_caching_connection=/root/ansible_fact_cache

示例:

执行一个会采集fact的playbook,查看是否将fact缓存到指定的位置

[root@main ~]# cat ansible.cfg 
[defaults]
......
gathering=smart
fact_caching_timeout=86400
fact_caching=jsonfile
fact_caching_connection=/root/ansible_fact_cache
......
​
[root@main ~]# ansible-playbook myhttpd.yaml 
​
PLAY [stop servera httpd] ***********************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [servera]
​
TASK [stop it] **********************************************************************************************************************************
ok: [servera]
​
PLAY [install serverb mod_ssl] ******************************************************************************************************************
​
TASK [Gathering Facts] **************************************************************************************************************************
ok: [serverb]
​
TASK [install it] *******************************************************************************************************************************
ok: [serverb]
​
PLAY RECAP **************************************************************************************************************************************
servera                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
​
[root@main ~]# ll /root/ansible_fact_cache/      #查看
total 56
-rw-r--r-- 1 root root 25052 Oct 19 18:00 servera
-rw-r--r-- 1 root root 25071 Oct 19 18:00 serverb

2.redis方式

需要安装redis服务且保持运行,还需要安装python支持redis的相关包,更改ansible.cfg

fact_caching=redis   #指定redis方式
fact_caching_connection=127.0.0.1:6379:0      #指定redis服务设备的IP和端口,使用0号数据库
​
[root@main ~]# yum install -y redis  #安装redis
[root@main ~]# systemctl start redis
[root@main ~]# ps -ef | grep redis
redis      4278      1  0 17:50 ?        00:00:00 /usr/bin/redis-server 127.0.0.1:6379
root       4286   1485  0 17:51 pts/0    00:00:00 grep --color=auto redis
[root@main ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
[root@main ~]# python --version
Python 2.7.5
[root@main ~]# yum list | grep python2-redis
python2-redis.noarch                     2.10.6-2.el7                  epel   
[root@main ~]# yum install -y python2-redis.noarch   #安装对应python版本对应的redis支持包
[root@main ~]# ansible-playbook myhttpd.yaml   #再执行一次
[root@main ~]# redis-cli    #进入查看
127.0.0.1:6379> keys *
1) "ansible_factsservera"
2) "ansible_factsserverb"
3) "ansible_cache_keys"
127.0.0.1:6379> type "ansible_cache_keys"
zset
127.0.0.1:6379> type "ansible_factsservera"   #前两个就是采集的facts
string
127.0.0.1:6379> 

3.memcached方式基本已弃用

 

 

相关文章:

Ansible的debug模块介绍,fact变量采集和缓存相关操作演示

目录 一.debug模块的使用方法 1.帮助文档给出的示例 2.主要用到的参数 (1)msg:主要用这个参数来指定要输出的信息 (2)var:打印指定的变量,一般是通过register注册了的变量 (3&…...

零基础新手也能会的H5邀请函制作教程

随着科技的的发展,H5邀请函已经成为了各种活动、婚礼、会议等场合的常见邀约方式。它们不仅可以提供动态、互动的体验,还能让邀请内容更加丰富多彩。下面,我们将通过乔拓云平台,带领大家一步步完成H5邀请函的制作。 1. 选择可靠的…...

推荐《中华小当家》

《中华小当家!》 [1] 是日本漫画家小川悦司创作的漫画。该作品于1995年至1999年在日本周刊少年Magazine上连载。作品亦改编为同名电视动画,并于1997年发行播出。 时隔20年推出续作《中华小当家!极》,于2017年11月17日开始连载。…...

接口自动化测试持续集成,Soapui接口功能测试参数化

按照自动化测试分层实现的原理,每一层的脚本实现都要进行参数化,自动化的目标就是要实现脚本代码与测试数据分离。当测试数据进行调整的时候不会对脚本的实现带来震荡,从而提高脚本的稳定性与灵活度,降低脚本的维护成本。Soapui最…...

(N-128)基于springboot,vue酒店管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis 本系统功…...

Linux UWB Stack实现——MCPS帧处理

MCPS帧处理 用于处理IEEE 802.15.4中的相关帧,Frame Processing,简写为:fproc。 在实现中,维护了关于帧处理的有限状态机(FSM)。本文从帧处理的数据结构和部分典型处理实现上进行简要的介绍。 1. 数据结构定义 关于帧处理状态…...

【面试经典150 | 区间】插入区间

文章目录 Tag题目解读题目来源解题思路方法一:合并区间方法二:模拟 其他语言python3 写在最后 Tag 【模拟】【数组】 题目解读 给定一个含有多个无重叠区间的数组,并且数组已经按照区间开始值升序排序。在列表中插入一个新的区间&#xff0…...

前端 js 之 浏览器工作原理 和 v8引擎 01

嘿,老哥,来了就别跑 !学完 ,不亏 😂 文章目录 一、输入url 之后做了什么二、简单了解下浏览器内核三、浏览器渲染过程 (渲染引擎)四、js 引擎五、chrome五、v8 引擎原理八、浏览器性能优化九、前…...

全波形反演培训的思考与总结

一. InversionNet 最简单的端到端DL_FWI 1. 网络结构: 图1 构建了一个具有编码器-解码器结构的卷积神经网络,根据地震波动数据模拟地下速度结构。编码器主要由卷积层构建,它从输入地震数据中提取高级特征并将其压缩为单个高维向量。解码器然后…...

Arcgis聚合工具——实现简单的升尺度

找到Aggregate工具 按如下设置进行操作 注意:如有需要对应的低分辨率影像,必须点开右下角环境Environments选项,进行栅格的捕捉选项设置,以防止升尺度后的影像与需对应的低分辨率影像的栅格单元存在偏移。 点击OK,即可…...

专题:链表常考题目汇总

文章目录 反转类型:206.反转链表完整版二刷记录 25. K个一组反转链表1 :子链表左闭右闭反转版本2 : 子链表左闭右开反转版本(推荐)⭐反转链表左闭右闭和左闭右开 合并类型:21.合并两个有序链表1: 递归法2: …...

记一次mysql事务并发优化

记一次mysql事务并发优化 背景 事情的情况大致是这样的。一个扣减库存的业务上线以后,隔几天会报一次错,错误内容如下: ERROR - exception: UncategorizedSQLException,"detail":"org.springframework.jdbc.UncategorizedSQ…...

GEO生信数据挖掘(九)WGCNA分析

第六节,我们使用结核病基因数据,做了一个数据预处理的实操案例。例子中结核类型,包括结核,潜隐进展,对照和潜隐,四个类别。第七节延续上个数据,进行了差异分析。 第八节对差异基因进行富集分析。…...

Python 中,单例模式的5种实现方式(使用模块、使用装饰器、使用类方法、基于new方法实现、基于metaclass方式实现)

单例模式的5种实现方式 1 使用模块 2 使用装饰器 3 使用类方法 4.基于new方法实现 5 基于metaclass方式实现 单例模式的5种实现方式 什么是单例模式? 单例模式是指:保证一个类仅有一个实例,并提供一个访问它的全局访问点# 线程1 执行&#x…...

超低延迟直播技术路线,h265的无奈选择

超低延迟,多窗显示,自适应编解码和渲染,高分辨低码率,还有微信小程序的标配,这些在现今的监控和直播中都成刚需了,中国的音视频技术人面临着困境,核心门户浏览器不掌握在自己手上,老…...

openstack 云主机 linux报 login incorrect

还未输入密码就提示login incorrect 不给输密码位置 完全不给输密码的机会 关机进入单用户 检查登录安全记录 vi /var/log/secure 发现 /usr/lib64/security/pam_unix.so 报错 将正常的机器提取/usr/lib64/security/pam_unix.so 比对MD5一致, 另外判断 libtir…...

Selenium:Web自动化框架

Selenium自动化入门 1、Selenium概述2、Selenium环境搭建3、Selenium基本操作4、网页元素定位5、操作Cookie6、标签页管理 1、Selenium概述 Selenium(Web Browser Automation)的初衷是Web应用自动化测试。Selenium广泛应用于爬虫,爬虫需要让浏…...

Android11 添加adb后门

软件平台:Android11 硬件平台:QCS6125 需求:通过设备的物理组合按键,直接打开adb功能,我们这里确定的是Volume-up、Volume-down、camera三个按键在短时间内各按三次即可触发,具体代码改动如下:…...

福昕阅读器打开pdf文档时显示的标题不是文件名

0 Preface/Foreword 1 现象 文件名为:Demo-20231017 打开效果:显示名字为 word template 2 解决方法 2.1 利用打印方式将word生产pdf 在word生成pdf文件时,使用打印方式生成pdf文档。 2.2 删除word文档设置的标题 文件---》信息---》标…...

Python自创项目—《数字帝国》更新日志

Inscode项目地址:https://inscode.csdn.net/2302_76241188/lxzn 或者点这里访问 更新时间:2023-10-04 更新内容:新增加四个地区 附:预计下次更新将会增加几个新的地区,修复一些已知bug...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...