人工智能与云计算
项目要求
一个简单的集群。您需要在此项目中创建计算机集群。这些机器是 docker 容器。集群管理器是一个 Python 程序。群集的状态将写入文件。
希望通过这个 Python 文件,首先它能够通过获取输入来得到要创建的集群中包含的容器数量,并与用户进行交互(用户可以执行此集群的扩容和缩容等操作),然后你可以查询他的状态列表,即该集群的状态。例如,有多少容器是活动状态的,有多少容器是停止状态的。你需要通过 Python 脚本将集群的状态写入文件。
实现功能:
- 创建:通过获取输入,与用户进行交互(用户可以执行此集群的扩容和缩容等操作),以获得要创建的集群中包含的容器数量。
- 启动容器:设置容器ID。
- 执行命令:运行一些命令。
- 停止容器。
- 完全删除容器。
- 扩容:在原有基础上增加容器数量,可以接收命令,并根据命令确定增加的容器数量。
- 缩容:减少容器数量。
- 删除集群中的所有容器。
代码实现:
一个完整的 ClusterManager 类和一个包含主循环的 if __name__ == "__main__": 部分。每个上述方法都放入该类中。这些方法包括:
创建集群 (create_cluster(self)):
根据用户输入,可以创建指定数量的容器,使用循环,使用 create 函数,每个运行一个交互式 shell (tty=True),并将容器对象添加到 self.containers 列表中。
import docker# 定义要运行的镜像名称和命令
image_name = "alpine"
self.client = docker.from_env() container = self.client.containers.create("alpine", "sh",tty=True, detach=True)
查询状态 (query_status(self)):
查询容器集群的状态,列出每个容器的 ID 和状态。通过遍历 self.containers 列表中的每个容器对象,使用 container.reload() 更新容器状态,然后打印每个容器的 ID 和状态。
container.reload()if container.status == "running":
扩容 (scale_up(self, count)):
扩展容器集群,向集群中添加指定数量的新容器,每个运行一个交互式 shell (sh)。使用循环创建指定数量的容器,每个运行一个交互式 shell (tty=True),并将容器对象添加到 self.containers 列表中。
container = self.client.containers.create("alpine", "sh", tty=True, detach=True)
缩容 (scale_down(self, count)):
缩小容器集群,从集群中移除指定数量的容器并停止它们。使用循环从 self.containers 列表中移除指定数量的容器并停止它们。
container = self.containers.pop()container.stop()
停止容器 (stop_container(self, container_id)):
停止具有指定ID的容器,使用容器ID获取容器对象,然后调用 container.stop() 方法停止容器。
container = self.client.containers.get(container_id)container.stop()
删除容器 (delete_container(self, container_id)):
删除具有指定ID的容器,使用容器ID获取容器对象,然后调用 container.remove() 方法删除容器并从 self.containers 列表中移除容器对象。
container = self.client.containers.get(container_id)container.remove()self.containers.remove(container)
运行命令 (run_command(self, container_id, command)):
在具有指定ID的容器中执行命令,使用容器的ID获取容器对象,等待容器状态变为“running”,然后使用 container.exec_run(command) 执行给定命令。
response = container.exec_run(command)
启动容器 (start_container(self, container_id)):
启动具有指定ID的容器,使用容器ID获取容器对象,然后调用 container.start() 方法启动已创建但已停止的容器。
container = self.client.containers.get(container_id)container.start()
获取容器日志 (get_container_logs(self, container_id)):
获取具有指定ID的容器的日志,使用容器ID获取容器对象,然后调用 container.logs() 获取容器的日志并将日志解码为文本。
container = self.client.containers.get(container_id)logs = container.logs()
注意事项:
- 镜像名称:我们的镜像默认使用“alpine”。
- 分离模式:这是一个布尔值,指定是否在分离模式下运行容器。默认值为 True,这意味着容器将在后台运行。
- 容器ID:运行命令的容器的 ID。容器的 ID 是完整的容器 ID。
- 命令:在容器内执行的命令。例如:"ls -l"。我们使用 echo "Hello, World!"。
- 在 run_container 和 start_container 方法中,都有打印容器状态,由于在创建或启动容器时状态可能不会立即变为“running”,我们设置循环以确保我们的打印输出是运行状态。
- 使用 manager.client.containers.prune() 确保容器列表是最新的。
import do相关文章:
人工智能与云计算
项目要求 一个简单的集群。您需要在此项目中创建计算机集群。这些机器是 docker 容器。集群管理器是一个 Python 程序。群集的状态将写入文件。 希望通过这个 Python 文件,首先它能够通过获取输入来得到要创建的集群中包含的容器数量,并与用户进行交互(用户可以执行此集群…...
9.(vue3.x+vite)修改el-input,el-data-picker样式
效果预览 二:相关代码 <template><div style="padding: 50px"><el-input placeholder="请输入模型名称" style="width: 260px" /><br /...
java反射和注解
反射 获取class对象的三种方法 ①:Class.forName("全类名"); ②:类名.class ③:对象.getclass(); 代码样例 package com.ithema;public class Main {public static void main(String[] args) throws ClassNotFoundException {//第…...
react_后台管理_项目
目录 1.运行项目 2. 项目结构 ①项目顶部导航栏 ②项目左侧导航栏 ③主页面-路由切换区 本项目使用的是 reacttsscss 技术栈。 1.运行项目 在当前页面顶部下载本项目,解压后使用编辑器打开,然后再终端输入命令: npm i 下载依赖后&am…...
【C语言】使用C语言编写并使用gcc编译动态链接库
【C语言】使用C 语言编写并使用 gcc 编译动态链接库 1.背景2.使用C编写代码3.使用gcc编译代码1.背景 在windows下开发很多程序接口被封装到动态链接库供其它开发者使用。 本博客使用C语言编写并使用gcc 编译 一个动态链接库文件FpdSys.dll; 然后使用C/C++/C#/Python去调用动态…...
使用supportFragmentManager管理多个fragment切换
android studio创建的项目就没有一个简单点的框架,生成的代码都是繁琐而复杂,并且不实用。 国内的页面一般都是TAB页面的比较多,老外更喜欢侧边菜单。 如果我们使用一个activity来创建程序,来用占位符管理多个fragment切换&…...
开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(六)
一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…...
独立开发者系列(17)——MYSQL的常见异常整理
虽然安装MYSQL到本地很简单,但是数据库报错还是经常出现,这个时候,需要我们进行逐步检查与修复。作为我们最常用的开发软件,无论切换php/go/python/node/java,数据库的身影都少不了,对于我们储存数据而言&a…...
【ajax实战02】数据管理网站—验证码登录
一:数据提交(提交手机验证码) 核心思路整理 利用form-serialize插件,收集对象形式的表单数据后,一并提交给服务器。后得到返回值,进一步操作 基地址: axios.defaults.baseURL http://geek.…...
人工智能在反无人机中的应用介绍
人工智能技术在无人机的发展中扮演着至关重要的角色,这一作用在反无人机技术领域同样显著。随着无人机技术的发展,飞行器具备了微小尺寸、高速机动性,以及可能采用的隐蔽或低空飞行轨迹等特性。这些特性使得传统的人工监视和控制手段面临着重…...
【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现
原题链接 题目描述 给你一个整数数组 nums。 返回两个(不一定不同的)质数在 nums 中 下标 的 最大距离。 示例 1: 输入: nums [4,2,9,5,3] 输出: 3 解释: nums[1]、nums[3] 和 nums[4] 是质数。因此答…...
【Gin】项目搭建 一
环境准备 首先确保自己电脑安装了Golang 开始项目 1、初始化项目 mkdir gin-hello; # 创建文件夹 cd gin-hello; # 需要到刚创建的文件夹里操作 go mod init goserver; # 初始化项目,项目名称:goserver go get -u github.com/gin-gonic/gin; # 下载…...
C++ 和C#的差别
首先把眼睛瞪大,然后憋住一口气,读下去: 1、CPP 就是C plus plus的缩写,中国大陆的程序员圈子中通常被读做"C加加",而西方的程序员通常读做"C plus plus",它是一种使用非常广泛的计算…...
Vue2组件传值(通信)的方式
目录 1.父传后代 ( 后代拿到了父的数据 )1. 父组件引入子组件,绑定数据2. 子组件直接使用父组件的数据3. 依赖注入(使用 provide/inject API)1.在祖先组件中使用 provide2.在后代组件中使用 inject 2.后代传父 (父拿到了后代的数据)1. 子组件…...
【数据结构 - 时间复杂度和空间复杂度】
文章目录 <center>时间复杂度和空间复杂度算法的复杂度时间复杂度大O的渐进表示法常见时间复杂度计算举例 空间复杂度实例 时间复杂度和空间复杂度 算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&…...
telegram支付
今天开始接入telegram支付,参考教程这个是telegram的官方说明,详细介绍了机器人支付API。 文章公开地址 新建机器人 因为支付是一个单独的系统,所以在做支付的时候单独创建了一个bot,没有用之前的bot了,特意这样将其分开。创建bot的方法和之前不变,这里不过多介绍。 获…...
elasticsearch-6.8.23的集群搭建过程
三个节点的 ElasticSearch 集群搭建步骤 准备三台机器:28.104.87.98、28.104.87.100、28.104.87.101 和 ElasticSearch 的安装包 elasticsearch-6.8.23.tar.gz ----------------------------- 28.104.87.98,使用 root 用户操作 ----------------------…...
javascript输出语法
javascript输出有三种方式 一种是弹窗输出,就是网页弹出一个对话框,弹出输出内容 语法是aler(内容) 示例代码如下 <body> <script> alert(你好); </script> </body> 这段代码运行后网页会出现一个对话框,弹出你…...
仓库管理系统26--权限设置
原创不易,打字不易,截图不易,多多点赞,送人玫瑰,留有余香,财务自由明日实现 1、权限概述 在应用软件中,通常将软件的功能分为若干个子程序,通过主程序调用。那么,通过…...
d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程
在使用计算机中,如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办?这个是非常常见问题,下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法! 一、d3dx9…...
开源项目容器镜像全流程实践:从命名规范到生产部署
1. 项目概述:从镜像名到开源协作生态的深度解构看到mco-org/mco这个镜像名,很多人的第一反应可能是去 Docker Hub 或 GitHub 上搜索,看看它具体是什么。但今天,我想从一个更本质、更实战的角度来聊聊这个话题。mco-org/mco不是一个…...
量化交易强化学习环境TradingGym:从Gym接口到实战策略训练
1. 项目概述:一个为量化交易策略量身定制的强化学习训练场如果你正在尝试将强化学习(Reinforcement Learning, RL)应用到股票、期货或加密货币的量化交易中,大概率会遇到一个共同的困境:环境太难搭了。市面上的回测框架…...
量子退火与经典优化结合的金融投资组合优化实践
1. 量子退火与经典优化结合的金融投资组合优化实践在金融投资领域,如何构建最优投资组合一直是核心挑战。传统方法如现代投资组合理论(MPT)和均值-方差优化(MVO)虽然奠定了理论基础,但在处理大规模资产配置时往往面临计算效率瓶颈。近年来,量…...
安卓客户端架构解析:从MVVM到网络通信的完整实践
1. 项目概述:一个面向安卓设备的智能客户端最近在整理手头的开源项目时,发现了一个挺有意思的仓库,名字叫TOM88812/xiaozhi-android-client。光看这个标题,你可能会有点摸不着头脑,这“小智”到底是个啥?是…...
基于MCP协议构建个人AI工作流:模块化套件配置与隐私优先实践
1. 项目概述:一个为个人工作流注入AI智能的MCP套件 最近在折腾AI Agent和自动化工作流的朋友,应该都绕不开一个词: MCP 。全称是Model Context Protocol,你可以把它理解成AI模型(比如Claude、ChatGPT)和外…...
信捷PLC XD/XL系列C语言功能块实战:从指针定义到数据调用,我的高效编程习惯分享
信捷PLC XD/XL系列C语言功能块实战:从指针定义到数据调用,我的高效编程习惯分享 在工业自动化领域,PLC编程的效率直接影响到设备调试周期和产线维护成本。作为一名长期使用信捷PLC XD/XL系列的工程师,我发现其C语言功能块的灵活运…...
别再为FluidSIM 3.6安装报错头疼了!WinHEX找不到进程?看这篇保姆级图文教程就够了
FluidSIM 3.6安装疑难全解析:从报错修复到高效使用指南 当工科实验室的电脑屏幕再次弹出那个令人窒息的错误提示——"WinHEX找不到进程",许多初次接触FluidSIM的师生都会陷入束手无策的困境。这款由德国Festo公司与帕德博恩大学联合开发的液压…...
如何分析SQL嵌套查询瓶颈_使用执行计划查看开销
应优先分析子查询的执行耗时而非行数:PostgreSQL看Subquery Scan的Actual Total Time,MySQL用EXPLAIN FORMATJSON查SUBQUERY/DERIVED的rows与filtered,若rows大且filtered低则索引失效。怎么看 EXPLAIN 里哪个子查询最拖后腿嵌套查询慢&#…...
14502黄大年茶思屋145期难题 第二题 QLC盘多namespace并发备电量优化问题 标准化解题框架
总标题:黄大年茶思屋145期难题第二题 AI无偏差版脱敏题目标准化解题详细写作框架 子标题:QLC盘多namespace并发备电量优化问题 标准化解题框架 摘要 本文严格遵循AI无偏差脱敏标准化写作范式,完整复刻本期第二道脱敏原题全文,逐项…...
你的参考文献规范吗?IEEE/Elsevier投稿前必查:LaTeX引用Early Access文章的正确姿势与避坑指南
IEEE/Elsevier投稿实战:LaTeX引用Early Access文献的终极解决方案 在学术出版的快节奏世界里,Early Access(提前在线发布)已成为主流期刊加速知识传播的重要方式。当你在深夜赶完论文最后一稿,突然发现参考文献列表里…...
