Docker+Flask 实战:打造高并发微服务架构
Docker+Flask 实战:打造高并发微服务架构
今天我们要深入探讨一个非常热门且实用的主题:基于 Docker 部署 Python Flask 应用。Docker 作为当下最流行的容器化技术,已经广泛应用于各种开发和部署场景,尤其是在微服务架构中。而 Flask 作为 Python 世界里轻量级的 Web 框架,同样备受开发者青睐。将二者结合,能极大地提高我们应用的部署效率和可移植性。接下来,我们就一起通过一个完整的实例来学习如何实现这个过程。
测试虚拟机环境介绍
在开始之前,先给大家介绍一下我们使用的测试虚拟机环境。我们使用的是 VMware,配置为 4G 内存和 2 核心。这样的配置对于我们今天的演示来说是足够的,当然在实际生产环境中,你可能需要根据具体的应用需求来调整硬件资源。
Docker + Flask 部署实例
1. 项目代码
首先,我们来看一下 Flask 应用的代码,它在 app.py
文件中。
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello Docker World!"if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
这段代码非常简单,我们导入了 Flask 框架,创建了一个 Flask 应用实例,然后定义了一个路由 /
,当访问这个路由时,会返回一个简单的字符串。最后,我们通过 app.run
方法启动了这个应用,并将其监听在 0.0.0.0:5000
上,这样容器内的服务就能监听所有网络接口,而不仅仅是本地环回地址。
2. Dockerfile 配置
接下来,我们要在项目根目录创建一个 Dockerfile
。
# 使用轻量级 Python 基础镜像
FROM python:3.11-slim# 设置工作目录
WORKDIR /app# 代码到容器
COPY . .# 安装依赖(使用国内镜像加速)
RUN pip install --no-cache-dir -r requirements.txt# 暴露端口
EXPOSE 5000# 启动命令
CMD ["python", "app.py"]
这里面有几个关键的指令需要大家注意。首先是 FROM python:3.10-slim
,我们使用的是官方的轻量级 Python 镜像,它的体积只有约 127MB,相比 centos
镜像更加高效,这对于我们构建和部署镜像来说可以节省很多时间和存储空间。然后是 --no-cache-dir
这个参数,它的作用是避免缓存依赖,确保每次构建时都能安装最新版本的依赖。EXPOSE 5000
声明了容器暴露的端口,不过需要注意的是,这只是一个声明,实际运行容器时还需要结合 -p
参数将容器端口映射到宿主机上。最后,CMD
指令定义了容器启动时要执行的命令。
3. 依赖管理
我们还需要创建一个 requirements.txt
文件,用来列出所有的依赖。
Flask==3.0.0
明确指定依赖的版本号是非常重要的,这样可以避免依赖冲突。建议大家在本地使用虚拟环境进行测试,确保所有依赖都能正常工作后,再进行打包。
4. 构建镜像
在项目目录下执行以下命令来构建镜像:
docker build --no-cache -t my-flask-app .
这里的 --no-cache
参数是强制重新构建镜像,避免缓存导致依赖未更新。
5. 运行容器
构建好镜像后,我们就可以启动容器并映射端口了。
docker run -d --name flask-container -p 8080:5000 my-flask-app
-d
参数表示后台运行容器,-p 8080:5000
是将宿主机的 8080 端口映射到容器的 5000 端口,--name
则是为容器指定一个名称,方便我们后续管理。
6. 测试访问
我们可以通过浏览器或终端来访问我们的应用:
curl http://localhost:8080
# 或
http://127.0.0.1:8080
如果一切正常,你应该能看到 Hello Docker World!
这个输出。
7. 调试与维护
在实际开发过程中,调试和维护是非常重要的。我们可以通过以下命令来查看容器的日志:
docker logs flask-container
如果需要进入容器的终端进行一些操作,可以使用:
docker exec -it flask-container /bin/bash
当我们修改了 app.py
中的代码后,需要重新执行 docker build
和 docker run
命令,或者使用 docker-compose
来简化这个流程。
完整高级优化实例
文件结构
下面我们来看一个更高级的优化实例,首先看一下文件结构:
.
├── docker-compose.yml # 编排配置
├── Dockerfile # 多阶段构建
├── app
│ ├── app.py # Flask 主程序
│ └── requirements.txt # 精确依赖
└── nginx└── nginx.conf # 反向代理配置
Dockerfile(含多阶段构建)
# 构建阶段
FROM python:3.11-slim-bullseye AS builder
WORKDIR /build
COPY app/requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt# 运行阶段
FROM python:3.11-slim-bullseye
WORKDIR /app# 安全配置
RUN adduser --disabled-password --gecos '' appuser && chown -R appuser:appuser /app
USER appuser# 依赖安装
# 这里要注意的是 /root/.local 不要写成 /home/appuser/.local,因为你的系统内没有这个目录
# 我是在 root 用户下执行的操作,所以是/root/.local
COPY --from=builder /root/.local /home/appuser/.local
ENV PATH=/home/appuser/.local/bin:$PATH# 应用代码
COPY app .# 健康检查
HEALTHCHECK --interval=30s --timeout=5s CMD curl -f http://localhost:5000/health || exit 1
# 启动命令
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "9", "--worker-class", "gevent", "app:app"]
这里使用了多阶段构建的方式,在构建阶段我们只安装依赖,然后在运行阶段将依赖复制过来,并使用非 root 用户运行应用,提高了容器的安全性。同时,我们还添加了健康检查,确保容器内的服务正常运行。启动命令使用了 gunicorn
作为 WSGI 服务器,并使用 gevent
作为工作类,提高了应用的并发性能。
app/app.py(含监控端点)
from flask import Flask
from prometheus_client import generate_latest, Counterapp = Flask(__name__)
REQUEST_COUNTER = Counter('http_requests_total', 'Total HTTP Requests')@app.route('/')
def hello():REQUEST_COUNTER.inc()return "Hello Production Docker World!"@app.route('/health')
def health():return "OK", 200@app.route('/metrics')
def metrics():return generate_latest()
在这个 app.py
中,我们添加了一些监控端点。/health
端点用于健康检查,/metrics
端点用于提供 Prometheus 监控数据,这样我们就能更好地监控应用的运行状态。
app/requirements.txt(精确版本控制)
Flask==3.0.0
gunicorn==21.2.0
gevent==23.9.1
prometheus-client==0.20.0
精确控制依赖的版本号可以避免因依赖版本不一致而导致的问题。
docker-compose.yml(生产编排)
version: '3.11'services:web:build: .ports:- "5000:5000"deploy:resources:limits:cpus: '2.0'memory: 1GBlogging:driver: "json-file"options:max-size: "100m"nginx:image: nginx:1.25ports:- "80:80"volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.confdepends_on:- web
docker-compose.yml
是用于生产编排的,我们可以通过它来定义多个服务,并进行资源管控和日志配置。这里我们定义了 web
和 nginx
两个服务,web
服务构建我们的 Flask 应用,nginx
服务作为反向代理,将请求转发到 web
服务上。
nginx/nginx.conf(反向代理配置)
worker_processes auto;events {worker_connections 1024;
}http {upstream flask {server web:5000;}server {listen 80;location / {proxy_pass http://flask;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
这个 nginx.conf
文件配置了反向代理,将所有请求转发到 web
服务的 5000 端口上。
部署流程
# 构建镜像
docker-compose build# 启动集群
docker-compose up -d# 验证部署
curl http://localhost/health
通过这几个简单的命令,我们就可以完成整个应用的部署和验证。
关键优化点说明
最后,我们来看一下这个高级优化实例的关键优化点:
优化方向 | 实现方案 |
---|---|
镜像体积 | 多阶段构建(162MB 镜像) |
并发性能 | Gunicorn + Gevent(9 workers) |
安全基线 | 非 root 用户运行 + 文件权限控制 |
可观测性 | Prometheus 监控端点 + 健康检查 |
资源管控 | CPU/内存限制 + 日志滚动策略 |
我们还进行了压力测试,所有参数均通过 wrk -t12 -c400 -d30s http://localhost/
压力测试验证,QPS 为1125,可能是虚拟机的原因吧。
下面的几个版本的对比:
镜像 | 组件 | 镜像大小 | QPS |
---|---|---|---|
flask-app:v1 | Python:3.11 +Flask3.0 | 138MB | 1000.95 |
flask-app:v2 | Python:3.11-alpine +Flask3.0 | 58.6MB | 899.78 |
flask-nginx-web:v1 | Python:3.11-slim-bullseye +Flask3.0+gunicorn21.2.0+ gevent23.9.1+prometheus-client0.20.0 | 162MB | 1125.04 |
flask-nginx-web:v2 | Python:3.11-alpine +Flask3.0+gunicorn21.2.0+ gevent23.9.1+prometheus-client0.20.0 | 92.7MB | 1049.89 |
alpin镜像确实小,从QPS的角度来看,并不是什么都用alpin镜像就好的。
总结
今天我们学习了如何基于 Docker 部署 Python Flask 应用,从简单的实例到高级优化实例,希望大家能对 Docker 的使用有更深入的理解。在实际开发中,大家可以根据自己的需求进行调整和优化,充分发挥 Docker 的优势。如果大家有任何问题,欢迎随时提问。谢谢大家!
相关文章:
Docker+Flask 实战:打造高并发微服务架构
DockerFlask 实战:打造高并发微服务架构 今天我们要深入探讨一个非常热门且实用的主题:基于 Docker 部署 Python Flask 应用。Docker 作为当下最流行的容器化技术,已经广泛应用于各种开发和部署场景,尤其是在微服务架构中。而 Fl…...
前端跨域如何调试,以及相关概念梳理【环境变量 本地代理 正向代理 反向代理 OPTIONS请求 CDN 等】
跨域报错 一 前端日常开发时,项目的部署地址和接口请求的地址一般是同源的,不会跨域。 例如项目的测试环境部署在https://my-dev.BeatingWorldLine.com/xxx, 测试环境的访问接口域名也要相同来保证不跨域https://my-dev.BeatingWorldLine.com/api/xxx, …...
【区块链】以太坊
学习视频源链接: https://www.bilibili.com/video/BV1Vt411X7JF/ 本文是根据肖老师的视频进行的笔记记录 bitcoin 1.0 区块链 以太坊 2.0区块链 以太坊 设置了 memory hard mining puzzle ,这造成了asic resistance, 后续 proof of work &a…...
MCU的工作原理:嵌入式系统的控制核心
MCU的工作原理可以概括为以下几个步骤: 1. 初始化 上电后,MCU从Flash存储器中加载程序代码,并初始化外设和寄存器。 2. 任务执行 根据程序逻辑,MCU执行数据处理、外设控制和通信等任务。通过中断系统实时响应外部事件。 3. 低…...
离线服务器ollama新增qwen2:0.5b模型
离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama,其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型,那么如何安装呢? 1.首先在有网的服…...
Ubuntu20.04安装运行DynaSLAM
目录 一、安装Anaconda 二、相关依赖库安装 1、boost安装 2、Eigen 3安装 3、opencv安装 4、Pangolin安装 三、配置Mask_RCNN环境 四、DynaSLAM编译 五、DynaSLAM运行 一、安装Anaconda 打开以下链接: Index of / 下载和自己系统匹配的安装包。这里下…...
Apache Shiro反序列化漏洞深度剖析:从原理到利用
引言 在Web安全的世界里,反序列化漏洞一直是最危险的漏洞类型之一。今天,我们将深入探讨Apache Shiro框架中的两个著名反序列化漏洞.通过通俗易懂的解释和详细的实例,帮助你理解这类漏洞的本质和危害。 Shiro框架与"记住我"功能简…...
Android UI 组件系列(二):Button 进阶用法
引言 在上一篇博客中,我们介绍了 Button 的基本用法和常见属性,掌握了 Button 的基础知识。然而,在实际开发中,Button 远不止于简单的点击功能,它还可以支持不同的变体、丰富的自定义样式,以及更灵活的状态…...
CentOS-7安装Docker(更新时间:2025-03-12)
CentOS-7安装Docker 该文章记录在CentOS 7上安装Docker的过程和步骤,以及在安装过程中遇到的困难和解决方案。 目录 CentOS-7安装Docker一、环境准备二、安装Docker1.验证服务器是否接入互联网2. 检查CentOS内核版本3.使用root权限登录CentOS。确保yum包更新到最新…...
网络空间安全(31)安全巡检
一、定义与目的 定义: 安全巡检是指由专业人员或特定部门负责,对各类设施、设备、环境等进行全面或重点检查,及时发现潜在的安全隐患或问题。 目的: 预防事故发生:通过定期的安全巡检,及时发现并解决潜在的…...
Kubernetes学习笔记-移除Nacos迁移至K8s
项目服务的配置管理和服务注册发现由原先的Nacos全面迁移到Kubernetes上。 一、移除Nacos 移除Nacos组件依赖。 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <…...
Docker 构建 nginx-redis-alpine 项目详解
Docker 构建 nginx-redis-alpine 项目详解 一、课程概述 嘿,朋友们!今天咱们要深入探索一个超级实用的项目 ——nginx-redis-alpine!这个项目可不简单,它包含了好多重要的知识点,像文件目录结构、核心文件的作用及配…...
【教学类-43-26】20240312 数独4宫格的所有可能(图片版 576套样式,空1格-空8格,每套65534张*576小图=3千万张小图)
背景需求: 之前做了三宫格所有可能图片 510小图*12套6120图,所以3分钟就生成了 【教学类-43-25】20240311 数独3宫格的所有可能(图片版 12套样式,空1格-空8格,每套510张,共6120小图)-CSDN博客…...
ChromeOS 134 版本更新
ChromeOS 134 版本更新 一、ChromeOS 134 更新内容 1. ChromeOS 自助终端(Kiosk)模式支持隔离 Web 应用(Isolated Web Apps) 从 ChromeOS 134 开始,自助终端(Kiosk)模式支持 隔离 Web 应用&a…...
Redis面试篇
目录 Redis面试篇 1.什么是Redis?作用是什么? 2.什么是缓存穿透、缓存击穿、缓存雪崩 2.1缓存穿透 2.2缓存击穿 2.3缓存雪崩 3.redis如何持久化 1. RDB(快照存储) 2. AOF(追加日志) 4.Redis 的过…...
C#中通过Response.Headers设置自定义参数
一、基础设置方法 1. 直接添加自定义头 // ASP.NET Core方案 Response.Headers.Append("X-API-Version", "2.3.1"); Response.Headers.Append("Custom-Auth-Token", Guid.NewGuid().ToString());• 底层原理:通过IHeaderDictionary…...
C++标准模板库学习--函数模板返回值参数类型
template<typename T1, typename T2> 2 T1 max (T1 a, T2 b) 3 { 4 return b < a ? a : b; 5 } 6 ... 7 auto m ::max(4, 7.2); // OK, 不过返回类型与第一个参数类型一样 如何解决模板的返回类型 法一,使用decltype进行类型推断,在编译时…...
BUG修复 | 一次钉钉工作台应用远程调试实战(开发者工具)
#1 ℹ️背景故事 最近用户反馈,钉钉工作台的应用无法正常使用,卡在自动登录页面。 天,这是运行10年的老程序😱,我当时真是吓得不轻。这老古董完全不记得怎么改了😂。 #2 🐞开启远程调试 钉钉…...
[目标检测] 训练之前要做什么
背景:训练一个Yolo8模型,在训练之前,数据集的处理是影响效果的关键因素。 Step1 定义规则 什么是人/车,比如人的话可能是站着的人,如果是骑电动车/自行车就不算是人。 Step2 收集数据集 1. 自己标注。如果是自己标…...
一窥DeepSeek开源EPLB项目:揭开技术背后的面纱
摘要 在DeepSeek开源DualPipe项目的同一天,EPLB项目也正式对外公开。EPLB(Enhanced Pipeline Balancing)并非一蹴而就的奇迹,而是经过长时间的研发与优化。该项目旨在通过改进管道平衡机制,提升系统的稳定性和效率。本…...
达梦数据库中插入导出图片的方法与应用
达梦数据库中插入导出图片的方法与应用 在数据库的实际应用场景中,图片存储是一项常见且重要的需求。以电商平台为例,商品展示图片是吸引消费者的关键元素;而在社交软件里,用户头像更是个人形象的直观体现。针对达梦数据库&#…...
问deepseek: OpenFOAM并行分区后,是如何实现ldumatrix矩阵向量乘法计算逻辑的?
在OpenFOAM中,lduMatrix 是用于存储稀疏矩阵的类,支持并行计算。并行分区后,lduMatrix 的矩阵向量乘法通过以下步骤实现: 1. 矩阵分区 分区:将矩阵和向量分配到多个处理器上,每个处理器负责一部分。接口&…...
linux(ubuntu)中Conda、CUDA安装Xinference报错ERROR: Failed to build (llama-cpp-python)
文章目录 一、常规办法二、继续三、继续四、缺少 libgomp库(最终解决)在 Conda 环境中安装 libgomp 如果符合标题情况 执行的: pip install "xinference[all]"大概率是最终解决的情况。 一、常规办法 llama-cpp-python 依赖 CMak…...
蓝耘携手通义万象 2.1 图生视频:开启创意无限的共享新时代
在科技飞速发展的今天,各种新奇的技术不断涌现,改变着我们的生活和工作方式。蓝耘和通义万象 2.1 图生视频就是其中两项非常厉害的技术。蓝耘就像是一个超级大管家,能把各种资源管理得井井有条;而通义万象 2.1 图生视频则像是一个…...
04 1个路由器配置一个子网的dhcp服务
前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…...
Android studio运行报错处理
没装HAXM报错: Intel HAXM 7.6.5 下载 下载链接: https://www.filehorse.com/download-intel-haxm/54766/download/#google_vignette 运行时弹窗提示:Device manager The emulator process for AVD Pixel_3a_API_34_extension_level_7_x86_6…...
【CXX】6.7 SharedPtr<T> — std::shared_ptr<T>
std::shared_ptr 的 Rust 绑定称为 SharedPtr。 限制: SharedPtr 不支持 T 为不透明的 Rust 类型。对于在语言边界上传递不透明 Rust 类型的所有权,应改用 Box(C 中的 rust::Box)。 示例 // src/main.rsuse std::ops::Deref; …...
NocoBase 本周更新汇总:双因素身份认证(2FA)
原文链接:https://www.nocobase.com/cn/blog/weekly-updates-202503013 汇总一周产品更新日志,最新发布可以前往我们的博客查看。 本周我们发布了 NocoBase 1.6.0 版本,带来集群模式部署、安全策略优化和迁移管理等多项新特性。 NocoBase …...
【Go学习】04-1-Gin框架-路由请求响应参数
【Go学习】04-1-Gin框架 初识框架go流行的web框架GinirisBeegofiber Gin介绍Gin快速入门 路由RESTful API规范请求方法URI静态url路径参数模糊匹配 处理函数分组路由 请求参数GET请求参数普通参数数组参数map参数 POST请求参数表单参数JSON参数 路径参数文件参数 响应字符串方式…...
DataX的python3使用
datax这东西本身是python2写的,这导致python3,就各种语法报错,问题是,现在的工程都是python3搞的,这就很难受.... 网上找到一篇帖子,可以解决这个问题: 原帖:python3执行datax报错…...
部署项目至服务器:响应时间太长,无法访问此页面?
在我们部署项目到服务器上的时候,一顿操作猛如虎,打开页面..... 这里记录一下这种情况是怎么回事。一般就是服务器上的安全组没有放行端口。 因为我是用宝塔进行项目部署的。所以遇到这种情况,要去操作两边(宝塔and服务器所属平台…...
Map<String,Object>中Fastjson提取entrys对应的值
今天在处理接口数据时,需要解析出对方传入的json数据,并需要取出其中一个字段的值来判断,记录下我的步骤,提供参考: 1.json数据准备 {"hrOrgUnit": "00000000-0000-0000-0000-000000000000CCE7AED4&q…...
【毕业论文格式】word分页符后的标题段前间距消失
文章目录 【问题描述】 分页符之后的段落开头,明明设置了标题有段前段后间距,但是没有显示间距: 【解决办法】 选中标题,选择边框 3. 选择段前间距,1~31磅的一个数 结果...
Android,Java,Kotlin 确保线程顺序执行的多种实现方式
在多线程编程中,有时需要确保一个线程必须等待另一个线程执行完毕后再执行。本文将介绍几种常见的方法来实现这一需求,并提供详细的代码示例。 1. 使用 Thread.join() Thread.join() 是最简单直接的方法,它会让当前线程等待目标线程执行完毕…...
AWK 入门教程:强大的文本处理工具
AWK 是一种强大的文本处理工具,广泛用于 Linux/Unix 系统中对文本文件或数据流进行操作。它能够基于条件筛选、统计字段、重新排列数据等。主要特点包括: 2. AWK 的基本语法 2.1 AWK 程序的结构 AWK 程序的结构: awk pattern { action } file 2.2 常…...
【Linux】在VMWare中安装Ubuntu操作系统(2025最新_Ubuntu 24.04.2)#VMware安装Ubuntu实战分享#
今天田辛老师为大家带来一篇关于在VMWare虚拟机上安装Ubuntu系统的详细教程。无论是学习、开发还是测试,虚拟机都是一个非常实用的工具,它允许我们在同一台物理机上运行多个操作系统。Ubuntu作为一款开源、免费且用户友好的Linux发行版,深受广…...
基于yolov8+streamlit实现目标检测系统带漂亮登录界面
【项目介绍】 基于YOLOv8和Streamlit实现的目标检测系统,结合了YOLOv8先进的目标检测能力与Streamlit快速构建交互式Web应用的优势,为用户提供了一个功能强大且操作简便的目标检测平台。该系统不仅具备高精度的目标检测功能,还拥有一个漂亮且…...
安装 Powerlevel10k 及 Oh My Zsh 的使用
1. 简介 Powerlevel10k 是 Oh My Zsh 最流行的终端主题,它不仅美观,还提供 Git 状态显示、命令执行时间、网络状态、Python 虚拟环境指示等 实用功能。相比其他主题,Powerlevel10k 速度更快、可定制性更强。 本教程将详细介绍如何安装 Powe…...
虚拟机下ubuntu进不了图形界面
6.844618] piix4_smbus 0000:07.3: SMBus Host ContrFoller not enabled! 7.859836] sd 2:0:0:0:0: [sda] Assuming drive cache: wirite through /dev/sda1: clean, 200424/1966080 files, 4053235/7864064 blocks ubuntu启动时,卡在上面输出位置 当前遇到的原因…...
从 root 一滴水看 Spring Data JPA 的汪洋大海
🔥 从 root 一滴水看 Spring Data JPA 的汪洋大海 🌊 在 Spring Data JPA 的世界里,Specification 是个让人又爱又恨的家伙 💡。它能帮你动态构建查询,但那个神秘的 Root<T> root 却总让人摸不着头脑࿱…...
二进制安装指定版本的MariaDBv10.11.6
一、官网下载mariadb安装包 Download MariaDB Server - MariaDB.org 找到对应的版本 下载安装包后上传到服务器这里不再赘述。 二、安装二进制包 1、解压安装包 2、查看安装包内的安装提示文档根据提示文档进行安装 # 解压安装包 tar xf mariadb-10.11.6-linux-systemd-x8…...
日志Python安全之SSTI——Flask/Jinja2
ssti的概念和模板引擎介绍等基础知识前面已经学过了,接下来直接进入正题 先了解flask/jinja2: flask: 用python编写的一个框架,集成 Jinja2 模板引擎(用于动态生成 HTML 内容)。 Flask 的核心组件&…...
梯度下降法以及随机梯度下降法
梯度下降法就是在更新weight的时候,向函数值下降的最快方向进行更新,具体的原理我就不再写了,就是一个求偏导的过程,有高数基础的都能够很快的理解过程。我在我的github里面会一直更新自己学习pytorch的过程,地址为&am…...
从零基础到能独立设计单片机产品,一般需要经历哪些学习阶段?
相信很多人,内心都有“钢铁侠”的幻想,成为能写程序,能设计硬件,能设计结构,能焊接的全能型人才。 上次徐工问我,如果你财富自由了,想去做啥? 我说出来,可能大家都不信&a…...
ORACLE 19.8版本遭遇ORA-600 [kqrHashTableRemove: X lock].宕机的问题分析
客户反馈单机环境的一个数据库半夜突然宕机了,这是一个比较重要的系统;接到通知后分析对应日志,发现ALERT日志中有明显报错:ORA-600 [kqrHashTableRemove: X lock]. 600报错我简单的分为2类,一类不会导致宕机&#x…...
OpenCV实现图像分割与无缝合并
一、图像分割核心方法 1、阈值分割 #include <opencv2/opencv.hpp> using namespace cv; int main() {Mat img imread("input.jpg", IMREAD_GRAYSCALE);Mat binary;threshold(img, binary, 127, 255, THRESH_BINARY); // 固定阈值分割imwrite("binary.…...
《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成
《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成 引言:AI 大模型的群雄逐鹿时代 在科技飞速发展的当下,AI 大模型领域已成为全球瞩目的焦点,竞争激烈程度堪称白热化。从 OpenAI 推出…...
如何搭建个人静态住宅IP:从零开始
你好!今天我们将一起探索如何从头开始搭建个人静态住宅IP。无论您是为了远程办公、在线教育还是游戏加速,静态住宅IP都能带给您更稳定的网络体验。 一、准备阶段 1. 明确需求 首先,您需要清楚自己为什么需要静态住宅IP。可能是为了实现远程…...
机器人触觉的意义
机器人触觉的重要性 触觉在机器人领域至关重要,尤其是在自主操作、精细操控、人机交互等方面。虽然视觉和语音技术已高度发展,但机器人在现实世界中的操作仍然受限,因为: 视觉有局限性:仅凭视觉,机器人难…...
【赵渝强老师】达梦数据库的目录结构
达梦数据库安装成功后,通过使用Linux的tree命令可以非常方便地查看DM 8的目录结构。 tree -L 1 -d /home/dmdba/dmdbms#输出的信息如下: /home/dmdba/dmdbms ├── bin 存放DM数据库的可执行文件,例如disql命令等。 ├── bin2 ├── d…...