【Ansible自动化运维】二、Playbook 深入探究:构建复杂自动化流程
在 Ansible 自动化运维体系中,Playbook 是极为关键的部分。它允许我们以一种结构化、可重复的方式定义和执行一系列复杂的任务,从而构建高效的自动化流程。本篇文章将深入探究 Ansible Playbook 的各个方面,助您掌握构建复杂自动化任务的核心技能。
一、Playbook 语法详解
Playbook 基于 YAML(Yet Another Markup Language)语法编写,YAML 以其简洁易读的特点,使得 Playbook 的编写和维护变得相对轻松。
1.1 基本结构
一个典型的 Playbook 由多个 “play” 组成,每个 “play” 定义了一组要在特定主机或主机组上执行的任务。以下是一个简单的 Playbook 结构示例:
- name: Install and Configure Apachehosts: web_serversbecome: yestasks:- name: Install Apacheyum:name: httpdstate: present- name: Start Apacheservice:name: httpdstate: started
解释:
- - name: 为整个 Playbook 或单个任务定义一个描述性名称,方便识别和调试。这里 “Install and Configure Apache” 描述了此 Playbook 的整体目的。
- hosts: 指定此 play 要作用的目标主机或主机组。在主机清单文件中定义了 “web_servers” 组,此 play 将在属于该组的主机上执行。
- become: 设置为 “yes” 表示需要使用特权(如 root 权限)来执行后续任务,通常用于安装软件、修改系统配置等需要高权限的操作。
- tasks: 下是具体任务列表,每个任务也是一个 YAML 字典。
- 每个任务同样有name:来描述其作用。如 “Install Apache” 表示此任务用于安装 Apache 软件。
- yum: 是 Ansible 的模块名称,这里使用yum模块来管理软件包。
- name: 和 state: 是yum模块的参数。name: httpd指定要安装的软件包名称为 “httpd”(Apache 在 CentOS 系统中的软件包名),state: present表示确保该软件包已安装。
- 第二个任务 “Start Apache” 使用service模块来管理服务状态,name: httpd指定要操作的服务为 “httpd”,state: started表示启动该服务。
1.2 YAML 语法要点
- 缩进规则:YAML 使用缩进表示层级关系,同一层级的元素必须保持相同的缩进量,通常使用 2 个或 4 个空格,不建议使用制表符。例如,tasks下的每个任务都比tasks缩进一级。
- 列表与字典:如上述示例中,整个 Playbook 是一个列表(用 “-” 开头表示),每个 play 是列表中的一个元素,而每个 play 又是一个包含多个键值对的字典(如hosts、become、tasks等都是字典的键)。任务列表tasks同样是一个列表,每个任务是其中的元素,且每个任务也是一个字典(包含name以及模块相关的键值对)。
- 注释:使用 “#” 进行单行注释,注释内容从 “#” 开始直到行尾。注释可以帮助阅读和理解 Playbook 的逻辑,尤其是在复杂的 Playbook 中。
二、任务与模块运用
2.1 选择合适的模块
Ansible 拥有大量丰富的模块,涵盖系统管理、软件安装、网络配置、文件操作等各个领域。在编写 Playbook 时,关键是要根据任务需求选择最合适的模块。
例如,在安装软件包方面:
- 在基于 Red Hat 系的系统(如 CentOS)上,使用yum模块;
- 在 Debian 系的系统(如 Ubuntu)上,则使用apt模块。
2.2 模块参数配置
每个模块都有其特定的参数,通过合理配置这些参数,我们可以精确控制任务的执行方式。
以copy模块为例,它用于将文件从控制节点复制到目标主机。假设我们要将控制节点上的/etc/nginx/nginx.conf文件复制到目标主机的相同位置,并备份目标主机上原有的文件,Playbook 片段如下:
- name: Copy Nginx Configurationhosts: web_serverstasks:- name: Copy nginx.confcopy:src: /etc/nginx/nginx.confdest: /etc/nginx/nginx.confbackup: yes
解释:
- src: 指定源文件路径,即控制节点上要复制的文件路径。
- dest: 指定目标文件路径,即文件要复制到目标主机的路径。
- backup: yes 表示在复制文件前,对目标主机上的原文件进行备份,备份文件会以.bak后缀命名。
三、变量与模板
3.1 变量定义与使用
变量在 Playbook 中起着重要作用,它允许我们动态地调整任务执行的参数和内容,提高 Playbook 的灵活性和可复用性。
变量可以在多个位置定义:
- 全局变量:在 Playbook 的开头定义,对整个 Playbook 有效。例如:
---
- name: Configure Servershosts: allvars:app_user: myuserapp_group: mygrouptasks:- name: Create Useruser:name: "{{ app_user }}"group: "{{ app_group }}"
解释:
- 在vars部分定义了两个全局变量app_user和app_group。
- 在 “Create User” 任务中,通过双大括号{{ app_user }}和{{ app_group }}的方式引用这些变量,Ansible 在执行任务时会将变量替换为实际的值。
- 主机变量:在主机清单文件中为特定主机或主机组定义。例如,在/etc/ansible/hosts文件中:
[web_servers]
web1.example.com web_port=8080
web2.example.com web_port=8081
在 Playbook 中可以这样引用主机变量:
- name: Configure Web Servershosts: web_serverstasks:- name: Set Web Portlineinfile:path: /etc/nginx/nginx.confline: "listen {{ web_port }};"
解释:
- 这里假设要在nginx.conf文件中设置不同主机的监听端口,通过引用主机清单中为每个主机定义的web_port变量,实现动态配置。
3.2 Jinja2 模板引擎
Jinja2 是 Ansible 中用于处理模板的强大引擎。通过 Jinja2 模板,我们可以在文件中嵌入变量、逻辑判断、循环等,生成动态的配置文件。
假设我们有一个nginx.conf.j2模板文件,内容如下:
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;{% for server in servers %}server {listen {{ server.port }};server_name {{ server.name }};location / {root /usr/share/nginx/html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}{% endfor %}
}
在 Playbook 中使用这个模板生成nginx.conf文件的代码如下:
- name: Generate Nginx Configurationhosts: web_serverstasks:- name: Template Nginx Configurationtemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confvars:servers:- name: web1.example.comport: 80- name: web2.example.comport: 8080
解释:
- template模块用于处理模板文件。
- src: 指定模板文件的路径,这里是控制节点上的nginx.conf.j2。
- dest: 指定生成文件的路径,即目标主机上的/etc/nginx/nginx.conf。
- 在vars部分定义了一个列表变量servers,模板文件中通过{% for server in servers %}循环遍历这个列表,动态生成多个server块的配置,根据每个服务器的name和port变量进行个性化配置。
四、任务编排与控制
4.1 任务顺序执行
默认情况下,Playbook 中的任务按照定义的顺序依次执行。前一个任务执行成功后,才会执行下一个任务。如果某个任务执行失败,Ansible 会停止执行后续任务,除非进行了特殊配置。例如,在前面安装和启动 Apache 的 Playbook 中,先执行安装任务,安装成功后再执行启动任务。
4.2 并行执行
在大规模部署场景下,为了提高执行效率,可以通过设置forks参数来控制并行执行的任务数量。forks参数可以在ansible.cfg文件中全局设置,也可以在 Playbook 中临时设置。例如,在 Playbook 中设置并行任务数为 10:
- name: Install Software on Multiple Servershosts: allforks: 10tasks:- name: Install Packageyum:name: some_packagestate: present
解释:
- forks: 10表示同时对 10 个主机执行 “Install Package” 任务,大大加快了在多台主机上安装软件的速度。
4.3 条件判断(when 关键字)
通过when关键字,我们可以根据条件来决定是否执行某个任务。例如,只在目标主机是 CentOS 系统时安装yum软件包:
- name: Install Yum Package on CentOShosts: alltasks:- name: Install Packageyum:name: some_packagestate: presentwhen: ansible_distribution == "CentOS"
解释:
- when: ansible_distribution == "CentOS"表示只有当ansible_distribution变量(Ansible 内置变量,用于标识目标主机的操作系统发行版)的值为 “CentOS” 时,才会执行 “Install Package” 任务。
4.4 循环(with_items 等)
当需要对一组数据重复执行相同任务时,可以使用循环。例如,要在目标主机上创建多个用户:
- name: Create Multiple Usershosts: alltasks:- name: Create Useruser:name: "{{ item }}"state: presentwith_items:- user1- user2- user3
解释:
- with_items后面是一个列表,Ansible 会依次从列表中取出每个元素,将其赋值给item变量,并执行 “Create User” 任务,从而实现创建多个用户的功能。
通过深入理解和运用 Ansible Playbook 的语法、任务与模块、变量与模板以及任务编排与控制等方面,我们能够构建出复杂而高效的自动化流程,极大地提升自动化运维的能力和效率。
相关文章:
【Ansible自动化运维】二、Playbook 深入探究:构建复杂自动化流程
在 Ansible 自动化运维体系中,Playbook 是极为关键的部分。它允许我们以一种结构化、可重复的方式定义和执行一系列复杂的任务,从而构建高效的自动化流程。本篇文章将深入探究 Ansible Playbook 的各个方面,助您掌握构建复杂自动化…...
unity 保存场景功能 可以保存运行时候地形变化和动态生成得物体,点击加载进来后可以继续上次退出时得场景
直接上代码了 using System; using System.Collections.Generic; using System.IO; using UnityEngine; using UnityEngine.UI;[System.Serializable] public class TerrainSaveData {public int heightmapResolution;public float terrainWidth;public float terrainLength;p…...
光谱相机的关键技术参数
光谱相机的关键技术参数直接影响其数据获取能力和应用场景适配性。以下是核心参数的详细解析,涵盖光谱性能、空间性能、硬件性能及环境适应性: 一、光谱性能参数 1. 光谱范围(Spectral Range) 定义:相机可…...
Linux系统管理与编程12: FTP服务配置
(本实验在CentOS7/8上完成,OpenEuler上暂时未实现) 兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 1 实验目标 1)理解FTP服务器原理 2) 掌握FTP服务器的配置文件 3)具备安装部署VSFTP的能力 4) 具备FTP的故障排除能…...
乐观锁与悲观锁的使用场景
悲观锁的应用场景 悲观锁的基本思想是假设并发冲突会发生,因此在操作数据时会先锁定数据,直到完成操作并提交事务后才释放锁。这种方式适用于写操作较多、并发冲突可能性较高的场景。 高写入比例的数据库操作:如果系统中有很多写操作&#x…...
金融级隐私安全之DeepSeek R1 模型去中心化存储和推理实现方案
目录 DeepSeek R1 进入去中心化存储网络意味着什么? 它是如何工作的? Atoma、Walrus和 Sui Atoma Network 已成功将 DeepSeek R1 670B 参数推理模型上传到 Walrus 去中心化存储网络。这标志着这种规模的模型首次在去中心化存储层上可用,确保无需依赖中心化基础设施即可实…...
基于django大数据平台的交通数据可视化设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,基于大数据平台的交通数据可视化系统当然不能排除在外。基于大数据平台的交通数据可视化系统是在实际应用和软件工程的开发原理之上&#…...
STM32 vs ESP32:如何选择最适合你的单片机?
引言 在嵌入式开发中,STM32 和 ESP32 是两种最热门的微控制器方案。但许多开发者面对项目选型时仍会感到困惑:到底是选择功能强大的 STM32,还是集成无线的 ESP32? 本文将通过 硬件资源、开发场景、成本分析 等多维度对比…...
柳宗元经典的10首唐诗
1、最孤独的诗:《江雪》 江雪 千山鸟飞绝,万径人踪灭。 孤舟蓑笠翁,独钓寒江雪。 这首诗被誉为“唐诗五绝最佳”之作。 富于理想的“永贞革新”失败后,柳宗元被贬永州,母亲也在半年后离世。年届三十,政…...
Windows11介绍(中英文版)
一、Windows 11 的发布背景与发展历程 Windows 11 是微软公司推出的一款重要的操作系统,它是 Windows 操作系统系列的最新版本之一。微软在操作系统领域拥有悠久的历史和丰富的经验,从早期的 Windows 95 开启了图形化操作系统的新时代,到 Wi…...
使用 VSCode 本地历史记录恢复误删除文件
vsCode未知操作意外删除项目根目录入口代码文件 使用vsCode多年, 第一次遇见这种情况, 只是下载了几个插件, 可能打开的窗口太多, 有几个代码版本比对的页面, 在没有察觉的时候, 意外删除了项目根目…...
前端面试宝典---数据类型
基本数据类型 对于基本类型在创建时无需使用 new 关键字 Bigint在实际开发不常用,如果对于精度要求高可以使用第三方库,如decimal.js 基本数据类型介绍 undefined:当变量被声明但未赋值,或者函数没有返回值时,就会呈现…...
Dinky 和 Flink CDC 在实时整库同步的探索之路
摘要:本文整理自 Dinky 社区负责人,Apache Flink CDC contributor 亓文凯老师在 Flink Forward Asia 2024 数据集成(二)专场中的分享。主要讲述 Dinky 的整库同步技术方案演变至 Flink CDC Yaml 作业的探索历程,并深入…...
【Proteus仿真】【32单片机-A008】MPX4115压力检测系统设计
目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、压力检测与LCD显示 2、超过上限,降压模块启动 3、压力检测范围15kpa-115kpa 4、压力阈值设置 5、超限报警 二、使用步骤 系统运行后,LCD160…...
银河麒麟系统虚拟机网络ping不通的解决方法
问题描述:使用NAT模式搭建了银河麒麟系统虚拟主机,虚拟机内部可以联网,可以查询到具体的ip地址,同时也可以在虚拟机内部ping同宿主机ip,但使用宿主机却无法ping同银河麒麟虚拟机ip,使用ssh、ftp、sftp等工具…...
spark数据清洗案例:流量统计
一、项目背景 在互联网时代,流量数据是反映用户行为和业务状况的重要指标。通过对流量数据进行准确统计和分析,企业可以了解用户的访问习惯、业务的热门程度等,从而为决策提供有力支持。然而,原始的流量数据往往存在格式不规范、…...
关于AIGC stable diffusion 在图像超分上的算法整理
参考文档: c论文阅读基于Stable Diffusion的图像超分 - 知乎 十分钟读懂Stable Diffusion运行原理 - 知乎 1.difussion model 扩散模型的基本原理 diffusion model 扩散模型是一类生成模型的统称,基于扩散过程生成数据。这类模型的核心是通过逐步加噪…...
Stable Diffusion ComfyUI 基础教程(一) ComfyUI安装与常用插件
前言: 相信大家玩 Stable Diffusion(以下简称SD)都是用的 web UI 操作界面吧,不知道有没有小伙伴听说过 ComfyUI。ComfyUI 是 一个基于节点流程的 Stable Diffusion 操作界面,可以通过流程,实现了更加精准…...
[leetcode]差分算法
一.差分算法性质 1.1计算差分数组: b[i] a[i] - a[i - 1] 1.2差分数组的性质 1.2.1对差分数组的每一项作前缀和,可以得到原来的数组 ai a1∑j1i−1dj 1.2.2将差分数组的某一项加i,那么其后面的所有项都会相对于原数组加i 让2~4项加3 这个第三…...
大数据技术之SPARK
Spark Core 什么是 RDD 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合 弹性 存储的弹性:内存与磁盘的自动切换; 容错的弹性:数据丢失可以自动恢复; 计算的弹性:…...
S32K144的m_data_2地址不够存,重新在LD文件中配置地址区域
在开发平台软件的时候代码中超出了64K的内存,单纯在ld文件中,增加m_data_2的存储长度,原先是0x00007000,我将长度修改为0x00008000,起始地址还是0x20000000,软件编译没有报错堆栈超出,但是软件下载到单片机中之后,144不…...
Spyder、PyCharm、VS Code 和 Jupyter Notebook 对比分析
在进行 Python 编程时,Spyder、PyCharm、VS Code 和 Jupyter Notebook 是最常用的几款开发工具(IDE/编辑器)。以下是它们在不同维度下的对比分析 🔧 一、基础介绍 软件类型主要特点Spyder科学计算IDE类似 MATLAB,集成…...
vue3腾讯云直播 前端拉流(前端页面展示直播)
1、引入文件,在index.html <link href"https://tcsdk.com/player/tcplayer/release/v5.3.2/tcplayer.min.css" rel"stylesheet" /><!--播放器脚本文件--><script src"https://tcsdk.com/player/tcplayer/release/v5.3.2/t…...
应急物资仓库管理系统|基于GAV仓库管理的应用
基于AGV应用的应急物资管理系统(智物资DW-S300)建设的目标是实现应急物资管理的信息化、智能化、规范化,保证应急物资的安全性和使用时的高效性,做到应急物资可追踪、可溯源。 构建一个应急物资仓储管理系统实现包括系统基本信息管理、入库管理、出库管理、筹措管理…...
ArkTS语言入门之接口、泛型、空安全、特殊运算符等
前言 臭宝们,今天我们来学习ArkTS中最后的一些内容。 实现接口 包含implements子句的类必须实现列出的接口中定义的所有方法,但使用默认实现定义的方法除外。 interface DateInterface {now(): string; } class MyDate implements DateInterface {no…...
蓝桥杯c++每日刷题(洛谷)
目录 P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷 (luogu.com.cn) P8706 [蓝桥杯 2020 省 AB1] 解码 - 洛谷 (luogu.com.cn) P8711 [蓝桥杯 2020 省 B1] 整除序列 - 洛谷 (luogu.com.cn) P8722 [蓝桥杯 2020 省 AB3] 日期识别 - 洛谷 (luogu.com.cn) P10385 [蓝桥杯 2024…...
Python+Requests 企业级接口测试入门(1~3天)
PythonRequests 企业级接口测试入门 1、GET接口简单案例 我的答案: import time import requestsdef get_all_users():try:response requests.get(urlhttps://reqres.in/api/users, #接口地址timeout10 #超时时间)respons…...
【android bluetooth 框架分析 01】【关键线程 3】【bt_jni_thread 线程介绍】
1. bt_jni_thread 职责介绍 bt_jni_thread 这个线程的作用是专门负责处理蓝牙 JNI 层的消息循环,也可以说是 C 层和 Java 层交互的桥梁线程。 1.1 什么是 JNI 层?为什么需要这个线程? JNI(Java Native Interface)是 …...
CCF - GESP Python三级考试题目示例
CCF - GESP Python三级考试题目示例,你可以根据实际需求进行调整。 一、单选题(每题2分,共30分) 以下关于Python中函数的说法,错误的是( ) A. 函数定义使用def关键字 B. 函数必须有返回值 C.…...
Windows10系统更改盘符
Windows10系统更改盘符 导航 文章目录 Windows10系统更改盘符导航更改盘符 更改盘符 按下wini,再按k进入磁盘管理器 右击你想更改的磁盘,选择“更改驱动器号”和路径,选择好驱动器号后确定即可...
软件功能性测试有多重要?功能性测试工具有哪些?
软件功能性测试是指对软件应用程序进行的测试,旨在验证软件的每一个功能是否按预定要求正常运作。功能性测试通常基于软件的需求文档,从用户的角度出发,确保所有功能都能够满足用户的需求。 软件功能性测试在软件开发生命周期中扮演着至关重…...
未来生态映像:杭州的科技自然协奏曲
故事背景 故事发生在2050年的中国杭州,这座千年古城已蜕变为科技与自然完美交融的未来生态之城。从晨曦微露的西湖到暮色中的良渚文化村,每个角落都上演着人类智慧与自然韵律的动人对话。 故事摘要 当第一缕阳光亲吻西湖的生态浮岛,无人机携带…...
电商核心指标解析与行业趋势:数据驱动的增长策略【大模型总结】
电商核心指标解析与行业趋势:数据驱动的增长策略 在电商领域,数据是决策的核心。从流量监测到用户行为分析,从价格策略到技术赋能,每一个环节的优化都离不开对核心指标的深度理解。本文结合行业最新趋势与头部平台实践࿰…...
ubuntu自动更新--unattended-upgrades
ubuntu自动更新--unattended-upgrades 1 介绍2 发展历程3 配置与使用4 disable Auto update服务命令 参考 1 介绍 Unattended-Upgrades 是一个用于自动更新 Debian 及其衍生系统(如 Ubuntu)的工具。它的主要功能是自动检查、下载并安装系统更新…...
在Ubuntu 22.04上配置【C/C++编译环境】
在Ubuntu 22.04上配置C/C编译环境 如果你想在Ubuntu 22.04上编译和运行C或C程序,首先需要安装一个合适的编译器和相关工具。本文将为你提供详细的安装建议和操作步骤,帮助你快速搭建开发环境。 准备工作 在开始之前,确保你的系统可以通过终…...
费马小定理
快速幂 理论 a n a a ⋯ a a^n a a \cdots a anaa⋯a,暴力的计算需要 O(n) 的时间。 快速幂使用二进制拆分和倍增思想,仅需要 O(logn) 的时间。 对 n 做二进制拆分,例如, 3 13 3 ( 1101 ) 2 3 8 ⋅ 3 4 ⋅ 3 1 3^{13}…...
什么是音频预加重与去加重,预加重与去加重的原理是什么,在什么条件下会使用预加重与去加重?
音频预加重与去加重是音频处理中的两个重要概念,以下是对其原理及应用条件的详细介绍: 1、音频预加重与去加重的定义 预加重:在音频信号的发送端,对音频信号的高频部分进行提升,增加高频信号的幅度,使其在…...
程序代码篇---时间复杂度空间复杂度
文章目录 前言一、时间复杂度(Time Complexity)定义1. 常见时间复杂度类型2. 计算规则忽略常数项保留最高阶项循环嵌套递归算法 3. 代码示例(1)𝑂(1):常数时间(2)𝑂(&…...
化工企业数字化转型:从数据贯通到生态重构的实践路径
一、战略定位:破解行业核心痛点 化工行业面临生产安全风险高(全国危化品企业事故率年增5%)、能耗与排放压力大(占工业总能耗12%)、供应链协同低效(库存周转率低于制造业均值30%)三大挑战。《石…...
Mysql备忘记录
1、简介 Mysql操作经常忘记命令,本文将持续记录Mysql一些常用操作。 2、常见问题 2.1、忘记密码 # 1、首先停止Mysql服务 systemctl stop mysqld # windows 从任务管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…...
Python 爬取 1688.item_get_factory 接口:获取工厂档案信息实战指南
在电商采购和供应链管理中,了解供应商的工厂信息是至关重要的一步。1688 作为国内领先的 B2B 平台,提供了丰富的供应商和工厂档案信息。通过 item_get_factory API 接口,开发者可以获取工厂的详细信息,包括工厂名称、地址、联系方…...
【Proteus仿真】【32单片机-A009】矩阵按键系统设计
目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、按键值与LCD显示 2、矩阵按键 二、使用步骤 系统运行后,LCD1602显示当前的按键值; 当按下不同按键后显示屏更新对应的按键值。 三、硬件资…...
【11408学习记录】英语语法精析:主从复合句之定语从句完全指南——从规则到实战例句一网打尽
定语从句 英语语法总结——主从复合句定语从句定语从句的写法先行词的作用分类定语从句的使用补充 每日一句词汇第一步:找谓语第二步:断开第三步:简化第一句第二句第三句第四句 英语 语法总结——主从复合句 定语从句 定语从句就是一个句子…...
go游戏后端开发31:麻将游戏的碰牌与胡牌逻辑
以下是润色后的版本: 1. 碰牌逻辑 1.1 触发碰牌 当一个玩家弃牌后,其他玩家可以选择碰牌。如果当前玩家决定碰牌,系统需要通知所有玩家这一操作。碰牌操作完成后,当前玩家需要出一张牌,系统同样需要通知所有玩家。 …...
vLLM实战:多机多卡大模型分布式推理部署全流程指南
1. 环境准备与基础配置 1.1 系统要求 依赖组件: # 基础工具安装 sudo apt-get install -y lsof git-lfs nvidia-cuda-toolkit1.2 虚拟环境配置 使用conda创建隔离环境,避免依赖冲突: conda create -n vllm python3.10 -y conda activate…...
RAI Toolbox详解
RAI Toolbox详解 摘要 RAI Toolbox是一个综合性的工具集,旨在帮助开发者和AI系统利益相关者更负责任地开发和监控AI系统,并做出更好的数据驱动决策。本文将详细介绍RAI Toolbox的功能、使用场景以及与类似AI项目的对比,帮助读者全面了解RAI…...
Python高级爬虫之js逆向+安卓逆向1.3节:Python数据类型
目录 引言: 1.3.1 两大数据类型 1.3.2 不可变数据类型 1.3.3 可变数据类型 1.3.4 再不跳槽就老了 引言: 大神薯条老师的高级爬虫安卓逆向教程: 这套爬虫教程会系统讲解爬虫的初级,中级,高级知识,涵盖…...
The 2024 CCPC National Invitational Contest (Changchun),第17届吉林省赛 C
补题链接 题解是什么意思呢,首先我们需要知道的是,斐波那契数列可以用矩阵快速幂和矩阵乘法求解 ( F ( n 1 ) F ( n ) ) ( 1 1 1 0 ) ( F ( n ) F ( n − 1 ) ) M ( F ( n ) F ( n − 1 ) ) \begin{pmatrix}F(n1) \\ F(n)\end{pmatrix} \begin{pma…...
GPT-4o-image模型:开启AI图片编辑新时代
在生成式AI技术爆发式迭代的今天,智创聚合API率先突破多模态创作边界,正式发布集成GPT-4o-image模型的创作平台,以“文生图-图生图-循环编辑”三位一体的技术矩阵,重新定义数字内容生产流程。生成图像效率较传统工具提升300%&…...
Java流程控制【if分支三种形式】
if分支三种形式 ①if(条件表达式) 代码; }②if(条件表达式){ 代码1; }else{ 代码2; }③if(条件表达式1){ 代码1; }else if(条件表达式2){ 代码2; }else if(条件表达式3){ 代码3;...... }else{ 代码n&#…...