Ubuntu20.04部署stable-diffusion-webui环境小记

news2025/3/12 12:21:03

Ubuntu20.04部署stable-diffusion-webui环境小记

文章目录

  • 前言
  • 后视镜视角查看安装文档
  • 聊聊我踩的那些坑
    • python3.11的安装
    • 执行sudo apt update报错
    • 显卡驱动
    • 内存优化
    • 网络问题
    • 无法打开系统设置和网络设置
    • 查询GPU使用情况
  • 总结

Stable Diffusion web UI
A web interface for Stable Diffusion, implemented using Gradio library.

前言

今天这篇算是工作学习笔记吧,主要记录下stable-diffusion-webui开源项目安装过程中遇到的问题,Stable Diffusion 是一种基于深度学习的文本到图像生成模型,能够根据给定的文本描述生成高质量的图像。它属于一种称为扩散模型(Diffusion Models)的生成模型,扩散模型在图像生成领域取得了显著的成果。

stable-diffusion-webui 是一个开源项目,旨在为 Stable Diffusion 模型提供一个简洁、用户友好的 Web 界面。这个界面使得用户能够更方便地使用 Stable Diffusion 生成图像,进行各种设置调整,甚至利用 GPU 加速来提高生成效率。它本质上是一个基于 Python 的 Web 应用程序,通常使用 Flask 或 FastAPI 作为后端框架,前端则是基于 HTML/CSS/JavaScript 实现的。

stable-diffusion-webui 作为一个开源项目的,它的安装过程已经被无数先行者实践过了,可是人们总会因为这样那样的原因遇到新的问题,可能是版本不对应,平台不熟悉、项目不熟悉、环境有问题等等,在我熬到半夜成功安装完一次以后,回过头来再看项目的 README 文件发现是那样的清晰,可是为什么在成功安装前踩了那么多坑呢?总结我遇到的坎坷有几点:英语不熟、Ubuntu恐惧、python混乱、操之过急。

所以我觉得把我安装的经历记录下来还是很有必要的,这样可以让我以后在类似的问题上少踩一些坑,安装背景是这样的,之前团队小伙伴也是用这个项目生成图,但是用的Windows版本,从 README 文件来看Windows版本在显卡驱动正常的情况下只需要 git clone 克隆库之后,运行 webui-user.bat 脚本即可,但是那台Windows配置不高,所以准备用新电脑再搭一次环境。

新入伍的电脑配置配置贼优秀:i9CPU32核、128G内存、Geforce RTX 4070Ti显卡、4TSSD硬盘,还有Windows10家庭版和Ubuntu20.04双系统,考虑到家庭版系统的限制和分配给它的小硬盘空间,我们还是决定在Ubuntu上重新部署一套环境,首先在我的认知里高配显卡和Ubuntu就不搭,所以当我遇到找不到显卡需要安装驱动时就头大,当然现在来看这只是偏见,但当时安装时并不知道,加上搜到的一些Ubuntu安装显卡驱动的繁琐教程,我走了一些弯路。

再有就是对英语的陌生感,导致查看README文件时有些急躁,有点胡乱一锅端的操作,还有就是要再安装一个新版本的Python解释器的恐惧,这也是导致我开始安装总遇到问题的主要原因,当我梳理了python3-venv功能之后,基本理解了虚拟环境的隔离概念和好处,也就理解了这些安装命令的作用。

后视镜视角查看安装文档

首先说明我的电脑系统是Ubuntu20.04,这就决定我电脑默认的Python不符合要求,下面是具体步骤:

Automatic Installation on Linux

1.Install the dependencies:

# Debian-based:
sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0
# Red Hat-based:
sudo dnf install wget git python3 gperftools-libs libglvnd-glx
# openSUSE-based:
sudo zypper install wget git python3 libtcmalloc4 libglvnd
# Arch-based:
sudo pacman -S wget git python3

先看这一段,一开始我准备一股脑全执行一遍,后来发现只需要执行 sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0 这一句即可,python3 是 Python 编程语言的第三版的执行文件, python3-venv 是一个用于创建 Python 3 虚拟环境的工具包, libgl1 是用于支持 OpenGL 的库,它提供了对图形硬件的低级接口,允许程序使用硬件加速进行 2D 和 3D 图形的渲染,libglib2.0-0 是 GLib 库的核心部分,它是许多 Linux 应用程序和工具的基础库之一,提供数据结构、内存管理、线程管理、文件 I/O、网络操作、正则表达式等功能,被广泛用于 GNOME 桌面环境和许多其他 C 应用程序中。

稍微新一点的Ubuntu系统执行这个命令就安装好了,比如Ubuntu22.04系统,自带的Python版本就是Python3.10,而我当前的电脑系统Ubuntu20.04自带的Python版本是Python2.7和Python3.8,所以Python相关的软件默认安装的不符合条件,接着往下看。

If your system is very new, you need to install python3.11 or python3.10:

# Ubuntu 24.04
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11

# Manjaro/Arch
sudo pacman -S yay
yay -S python311 # do not confuse with python3.11 package

# Only for 3.11
# Then set up env variable in launch script
export python_cmd="python3.11"
# or in webui-user.sh
python_cmd="python3.11"

原来这个项目需要的版本是Python3.11 或者 Python3.10,所以系统自带的Python3.8是不行的,这里开头有句提示,如果系统太新(比如Ubuntu24.04)就使用这些命令安装,而我们是因为系统太老所以要使用这些命令

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11
sudo apt install python3.11-venv # 这句原文档没有,我觉得安装对应版本的好一些

这里补充关键的一点,对照上面所需的命令,应该额外安装一下 sudo apt install python3.11-venv 这个虚拟环境的软件,另外的重中之重是要执行 export python_cmd="python3.11",或者在 webui-user.sh 文件中添加 python_cmd="python3.11"信息,我就是没看到这一步,导致Python安装混乱,耽误了几个小时,推荐将配置放到文件中,一会告诉你这个文件在哪,接着往下看

2.Navigate to the directory you would like the webui to be installed and execute the following command:

wget -q https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh

Or just clone the repo wherever you want:

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

这第二步给了两种方式,一种是直接下载脚本执行,另一种是直接clone一个库,我就是为了省事选了第一种,但又没设置python_cmd变量,导致下载过程中这种缺python库,所以这里推荐第二种,直接在自定义位置克隆一个库,然后进入stable-diffusion-webui目录,打开文件webui-user.sh,添加python_cmd="python3.11"信息,继续往后看:

3.Run webui.sh.
4.Check webui-user.sh for options.

第三步是执行 webui.sh 脚本,可以直接运行下载的脚本 ./webui.sh,也可以进入克隆的项目目录stable-diffusion-webui运行命令 ./webui.sh

第四步就是检查用户参数了,我们手动添加了一个python_cmd="python3.11",其实在 webui.sh 文件中用这样一段描述:

#################################################
# Please do not make any changes to this file,  #
# change the variables in webui-user.sh instead #
#################################################

而在webui-user.sh也有一些被注释的默认变量供我们修改:

#!/bin/bash
#########################################################
# Uncomment and change the variables below to your need:#
#########################################################

# Install directory without trailing slash
#install_dir="/home/$(whoami)"

# Name of the subdirectory
#clone_dir="stable-diffusion-webui"

# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
#export COMMANDLINE_ARGS=""

# python3 executable
#python_cmd="python3"

# git executable
#export GIT="git"

# python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
#venv_dir="venv"

# script to launch to start the app
#export LAUNCH_SCRIPT="launch.py"

# install command for torch
#export TORCH_COMMAND="pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113"

# Requirements file to use for stable-diffusion-webui
#export REQS_FILE="requirements_versions.txt"

# Fixed git repos
#export K_DIFFUSION_PACKAGE=""
#export GFPGAN_PACKAGE=""

# Fixed git commits
#export STABLE_DIFFUSION_COMMIT_HASH=""
#export CODEFORMER_COMMIT_HASH=""
#export BLIP_COMMIT_HASH=""

# Uncomment to enable accelerated launch
#export ACCELERATE="True"

# Uncomment to disable TCMalloc
#export NO_TCMALLOC="True"

###########################################
python_cmd="python3.11"

至此总结一下在Ubuntu20.04上配置环境的精简步骤

  1. 安装依赖
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv libgl1 libglib2.0-0
  1. 在自定义位置克隆项目
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
  1. 进入stable-diffusion-webui目录,在文件 webui-user.sh 中添加 python_cmd="python3.11" 信息

  2. 运行stable-diffusion-webui目录下的脚本文件 ./webui.sh

聊聊我踩的那些坑

前面描述了怎样正确搭建环境,最后总结下来就寥寥几步,但是我却兜兜转转花了几个小时,下面聊聊我都踩了哪些坑,以及用到了哪些东西?

python3.11的安装

因为自己的偏见,认为Python环境的混乱,所以在这里吃了亏,使用默认命令安装完发现是Python3.8版本,于是执行 sudo apt install python3.11 命令安装,但是因为没有导入环境变量 export python_cmd="python3.11",导致执行脚本时各种报 “No module named pip” 错误,我甚至想删掉自带的Python2.7版本和Python3.8版本,还好是Deepseek劝住了我,不然我就全给它卸载了,但是因为找不到pip,指定安装也不好使,我又搞起来骚操作,将 /usr/bin/ 目录下的 python 和 python3都指向了 Python3.11,勉强解决了这个问题,但却引入了更大的麻。

重启之后打不开终端了,一些软件更新和图形界面话的东西也不好使了,经过几个小时的摸索我想起了DeepSeek劝我的话,难道是因为系统的GNOME用到了他们,我赶紧将python和python3的软连接还原了,重启之后发现果然正常了。

当我意识到这个问题后,从头重新安装Python,指定了环境变量 python_cmd, 就没遇到这个麻烦了。

这里在安装Python3.11前有一句 sudo add-apt-repository ppa:deadsnakes/ppa,是一条在 Ubuntu 系统中用于添加 PPA(Personal Package Archive,个人包存档)的命令,让你能够从该源中获取更新的软件包。deadsnakes 是一个非常流行的 PPA,提供了 Ubuntu 官方源中不包含的 Python 版本。例如,它提供了比默认 Ubuntu 存储库中更高版本的 Python(例如 Python 3.11、3.12)供用户安装。

这个项目使用 python3.11-venv 创建虚拟隔离环境,它是通过 文件系统隔离环境变量配置 的方式实现虚拟环境的隔离。具体来说,虚拟环境会创建一个包含独立 Python 解释器和依赖包的目录,这样每个项目可以有自己的依赖和库,不会影响系统的全局环境或其他虚拟环境。

执行sudo apt update报错

每次执行软件检查更新时总是报错以下错误

$ sudo apt update
命中:2 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal InRelease
命中:1 https://packages.microsoft.com/repos/code stable InRelease
获取:3 https://dl.google.com/linux/chrome/deb stable InRelease [1,825 B]
错误:3 https://dl.google.com/linux/chrome/deb stable InRelease
  由于没有公钥,无法验证下列签名: NO_PUBKEY 32EE5355A6BC6E42
命中:4 http://security.ubuntu.com/ubuntu focal-security InRelease
命中:5 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal InRelease

从错误信息来看,问题是由于缺少 Google Chrome 存储库的公钥(NO_PUBKEY 32EE5355A6BC6E42),导致无法验证软件包的签名。解决方法如下:

可以手动添加缺失的公钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 32EE5355A6BC6E42

如果 keyserver.ubuntu.com 无法连接,可以尝试其他密钥服务器,例如 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 32EE5355A6BC6E42

显卡驱动

运行启动脚本后找不到GPU显卡,报错如下:

ailsa@ailsa-Server:~$ ./webui.sh

################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
################################################################

################################################################
Running on ailsa user
################################################################

################################################################
Create and activate python venv
################################################################

################################################################
Launching launch.py...
################################################################
glibc version is 2.31
Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage)
Python 3.8.10 (default, Jan 17 2025, 14:40:23)
[GCC 9.4.0]
Version: v1.10.1
Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2
Traceback (most recent call last):
  File "launch.py", line 48, in <module>
    main()
  File "launch.py", line 39, in main
    prepare_environment()
  File "/home/ailsa/stable-diffusion-webui/modules/launch_utils.py", line 387, in prepare_environment
    raise RuntimeError(
RuntimeError: Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check

按照程序人的直觉来看是驱动有问题,关于装驱动我还是有点恐惧的,之前折腾各个Ubuntu系统版本的时候没少花费时间,我的水平也就保持在用驱动精灵给Windows安装驱动的阶段,说是给Ubuntu安装显卡驱动实属有点强人所难了,我一直以为Ubuntu不需要太强劲的显卡,好显卡都是给打游戏准备的,不过最近的AI兴起确实给了NVIDIA显卡更广阔的应用空间,然后我就搜索Ubuntu安装NVIDIA显卡驱动的教程,看了大片大片天花乱坠的众多命令之后我真的傻眼了,一个都不想敲。

后来我发现了 ubuntu-drivers,它是 Ubuntu 系统中一个非常实用的命令行工具,主要用于自动检测硬件设备,并推荐、安装合适的驱动程序,特别是针对显卡、无线网卡等设备的驱动。

安装方法如下:

sudo apt update
sudo apt install ubuntu-drivers-common

使用方法也极其简单,直接一条命令 sudo ubuntu-drivers autoinstall,会根据系统检测到的硬件情况,自动选择并安装最合适的驱动,无需手动指定。

安装完之后重启,显卡居然好了,丝滑到让人难以置信。

内存优化

显卡问题解决好后,启动时报出一条警告

Cannot locate TCMalloc. Do you have tcmalloc or google-perftool installed on your system? (improves CPU memory usage)

这个警告是提示你没有安装 TCMalloc(Thread-Caching Malloc),它是 Google 提供的一种内存分配器,能够提高程序的内存使用效率,尤其在多线程环境下表现较好。虽然它不是必需的,但它可以帮助改善程序的内存使用效率,尤其是在使用 stable-diffusion 这类内存密集型应用时。

解决办法如下:

  1. 安装 google-perftools(其中包括 TCMalloc)

    sudo apt update
    sudo apt install google-perftools
    
  2. 设置环境变量
    安装完成后,可能需要设置环境变量,以便 Python 和其他程序能够找到 TCMalloc 库。你可以通过设置 LD_PRELOAD 来加载 TCMalloc 库。

    export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"
    

    也可以将此命令添加到你的 .bashrc.bash_profile 文件中,以便每次启动终端时自动加载。

    echo 'export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"' >> ~/.bashrc
    source ~/.bashrc
    
  3. 验证安装
    确保 TCMalloc 已正确安装,可以通过运行以下命令来验证:

    ldd $(which python3) | grep tcmalloc
    

    如果看到类似以下输出,说明 TCMalloc 已加载:

    libtcmalloc_minimal.so.4 => /usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4 (0x00007ff0e879e000)
    
  4. 重启程序
    完成以上步骤后,你可以重新运行 webui.sh 脚本,就不会再看到关于 TCMalloc 的警告。

网络问题

解决完了内存又遭遇了网络问题,因为下载的库和资源多是 google.com 域名下的,为了更好的下载所以配置了代理访问,但是遭遇了以下错误

################################################################
Launching launch.py...
################################################################
Python 3.11.11 (main, Dec  4 2024, 08:55:08) [GCC 9.4.0]
Version: v1.10.1
Commit hash: 82a973c04367123ae98bd9abdf80d9eda9b910e2
Launching Web UI with arguments:
Traceback (most recent call last):
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/launch.py", line 48, in <module>
    main()
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/launch.py", line 44, in main
    start()
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/modules/launch_utils.py", line 465, in start
    import webui
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/webui.py", line 13, in <module>
    initialize.imports()
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/modules/initialize.py", line 23, in imports
    import gradio  # noqa: F401
    ^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/__init__.py", line 3, in <module>
    import gradio.components as components
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/components/__init__.py", line 1, in <module>
    from gradio.components.annotated_image import AnnotatedImage
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/components/annotated_image.py", line 12, in <module>
    from gradio import utils
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/utils.py", line 353, in <module>
    class AsyncRequest:
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/gradio/utils.py", line 372, in AsyncRequest
    client = httpx.AsyncClient()
             ^^^^^^^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_client.py", line 1395, in __init__
    proxy_map = self._get_proxy_map(proxies, allow_env_proxies)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_client.py", line 216, in _get_proxy_map
    return {
           ^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_client.py", line 217, in <dictcomp>
    key: None if url is None else Proxy(url=url)
                                  ^^^^^^^^^^^^^^
  File "/home/ailsa/stable-diffusion-webui/workspace/stable-diffusion-webui/venv/lib/python3.11/site-packages/httpx/_config.py", line 336, in __init__
    raise ValueError(f"Unknown scheme for proxy URL {url!r}")
ValueError: Unknown scheme for proxy URL URL('socks://127.0.0.1:7891/')

我安装了pip install httpx==0.22.0不好使,后来在这个官方的issue里找到了答案 unset ALL_PROXY

无法打开系统设置和网络设置

因为安装项目前完整的更新了一遍系统,发现缺了一些东西,这里提到的便是其中两项,重新安装GNOME控制中心就好了

sudo apt update
sudo apt install --reinstall gnome-control-center

查询GPU使用情况

系统自带的性能查看器中没有GPU信息,所以按照下面步骤,将系统信息显示到顶部的状态条上,先安装必要软件和扩展

sudo apt update
sudo apt install gnome-tweaks
sudo apt install gnome-shell-extension-system-monitor

接着按下 Alt + F2,输入 r,然后按回车,检查扩展是否已启用,需重新打开 GNOME Tweaks,方法如下:

方法 1:通过应用菜单搜索, 按下 Super 键(Windows 键),在搜索栏中输入 Tweaks 或 优化,然后点击打开。
方法 2:通过终端启动 gnome-tweaks

总结

  • Ubuntu20.04添加Python3.11软件源的方法是 sudo add-apt-repository ppa:deadsnakes/ppa
  • 安装Python环境和依赖使用命令 sudo apt install python3.11 python3.11-venv libgl1 libglib2.0-0
  • 安装NVIDIA显卡驱动的命令 sudo ubuntu-drivers autoinstall
  • 取消代理的方法 unset HTTP_PROXYunset HTTPS_PROXYunset ALL_PROXY

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

记录自己做决定时的想法,哪些是经过了仔细的谋划,哪些是因为运气降临,诚然,运气确实也是一种实力,但是不可依赖,只有那些经过谋划后的成功才经得起历史的推敲和未来的检验~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

索引以及索引底层数据结构

一、什么是索引&#xff1f; 索引&#xff08;index&#xff09;是数据库高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff08;B树&#xff09;&#xff0c;这些数据结构以某种方式指向真在…

开业盛典活动策划方案拆解

道叔来给大家详细剖析咱们方案库里刚收录的这份《蜀大侠火锅店武侠风开业盛典活动策划方案》了&#xff0c;保证让你看完直呼过瘾&#xff0c;收获满满&#xff01; 一、主题创意&#xff1a;武侠风&#xff0c;直击人心 首先&#xff0c;咱们得夸一下这活动的主题——“XXX‘…

API 接口自动化

HTTP协议 - 白月黑羽 HTTP协议简介 如果客户端是浏览器&#xff0c;如何在chrome浏览器中查看 请求和响应的HTTP消息&#xff1f;按f12-》network 清除当前信息 响应的消息体在Response里看 点preview&#xff0c;可以看响应的消息体展开的格式 HTTP请求消息 请求头 reques…

安全测试|SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时&#xff0c;利用服务器漏洞&#xff0c;由攻击者构造请求&#xff0c;服务器端发起请求的安全漏洞&#xff0c;攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…

智能编程助手功能革新与价值重塑之:GitHub Copilot

引言&#xff1a; GitHub Copilot 的最新更新为开发者带来了显著变化&#xff0c;其中 Agent Mode 功能尤为引人注目。该模式能够自动识别并修复代码错误、自动生成终端命令&#xff0c;并具备多级任务推理能力&#xff0c;这使得开发者在开发复杂功能时&#xff0c;可大幅减少…

物联网行业通识:从入门到深度解析

物联网行业通识&#xff1a;从入门到深度解析 &#xff08;图1&#xff1a;物联网生态示意图&#xff09; 一、引言&#xff1a;万物互联时代的到来 根据IDC最新预测&#xff0c;到2025年全球物联网设备连接数将突破410亿&#xff0c;市场规模达1.1万亿美元。物联网&#xff…

ABP - 事件总线之分布式事件总线

ABP - 事件总线之分布式事件总线 1. 分布式事件总线的集成1.2 基于 RabbitMQ 的分布式事件总线 2. 分布式事件总线的使用2.1 发布2.2 订阅2.3 事务和异常处理 3. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦&#xff0c;使代码模块之间功能职责更清晰。而分布…

再谈SpringCloud Gateway源码

再谈SpringCloud Gateway源码 一、整体请求流程二、前置对象准备1、实例化HandlerMapping2、实例化Route3、实例化WebHandler 三、实践业务扩展点1、定义扩展Route对象2、Filter能做什么3、定义扩展Filter对象4、定义父类Filter简化请求参数处理 前言&#xff1a; 之前有阅读过…

把 CSV 文件摄入到 Elasticsearch 中 - CSVES

在我们之前的很多文章里&#xff0c;我有讲到这个话题。在今天的文章中&#xff0c;我们就提重谈。我们使用一种新的方法来实现。这是一个基于 golang 的开源项目。项目的源码在 https://github.com/githubesson/csves/。由于这个原始的代码并不支持 basic security 及带有安全…

C进阶 数据的存储

目录 前言 一&#xff0c;VS的知识储备 二&#xff0c;有趣的scanf()读取 三&#xff0c;数据的存储 引言 四&#xff0c;整数存储 五&#xff0c;小数存储 总结 前言 这里将深入计算机&#xff0c;看计算机是如何进行数据的存储的&#xff0c;怎么在计算机里面筑巢 为…

【c++】【Linux】【进程】线程终止/崩溃 会导致进程终止/崩溃 吗?

【c】【Linux】【进程】线程终止/崩溃 会导致进程终止/崩溃 吗&#xff1f; 1.线程终止会导致进程终止吗&#xff1f; 在操作系统中&#xff0c;线程是进程的基本执行单元&#xff0c;一个进程可以包含一个或多个线程。 当一个子线程终止时&#xff0c;进程并不会因此自动终…

springcloud集成gateway

本篇文章只介绍gateway模块的搭建步骤&#xff0c;并无gateway详细介绍 gateway详解请查看&#xff1a;SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇&#xff1a; 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…

pandas(13 Caveats Gotchas和SQL比较)

前面内容&#xff1a;pandas(12 IO工具和稀松数据) 目录 一、Caveats警告 & Gotchas预见 1.1 在Pandas中使用if/Truth语句 1.2 位运算布尔 1.3 isin操作 1.4 重新索引reindex和 loc&iloc 使用注意事项 1.5 loc和iloc 二、Python Pandas 与SQL的比较 2.1 数…

Android的Activity生命周期知识点总结,详情

一. Activity生命周期 1.1 返回栈知识点 二. Activity状态 2.1 启动状态 2.2 运行状态 2.3 暂停状态 2.4 停止状态 2.5 销毁状态 三. Activity生存期 3.1 回调方法 3.2 生存期 四. 体验Activity的生命周期 五. Activity被回收办法 引言&#xff1a; 掌握Acti…

基于Python的Flask微博话题舆情分析可视化系统

2024数据 ✅️标价源码 远程部署加 20 ✅️爬虫可用 有六月数据 ✅️修复bug不会突然打不开网页 系统稳定 系统的功能如下: 1.数据的爬取 2.用户的登录注册 3.热词统计&#xff0c;舆情统计 4.文章统计分析 5.发布地址统计 6.评论统计 7.情感分类统计 编程语言&#xff1a;py…

【油漆面积——线段树,扫描线,不用pushdown的特例,pushup兼有cal的性质】

题目 分析 不用pushdown是因为&#xff1a; 对于modify&#xff0c;操作是互逆过程&#xff0c;因此不会存在向下结算的pushdown过程 对于query&#xff0c;操作始终针对最上层的tr[1]&#xff0c;也不需要pushdown 对于pushdown&#xff0c;一则是怕不结算就标记&#xff0c;会…

深度学习(1)-简单神经网络示例

我们来看一个神经网络的具体实例&#xff1a;使用Python的Keras库来学习手写数字分类。在这个例子中&#xff0c;我们要解决的问题是&#xff0c;将手写数字的灰度图像&#xff08;28像素28像素&#xff09;划分到10个类别中&#xff08;从0到9&#xff09;​。我们将使用MNIST…

硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍

目录 电磁兼容试验-传导差模电流试验 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-传导差模电流干扰试验 驻留时间是在规定频率下影响量施加的持续时间。被试设备&#xff08;EUT&#xff09;在经受扫频频带的电磁影响量或电磁干扰的情况下&#xff0c;在每个步进…

Shader示例 6: 卡渲基础 - 描边 + 着色

0 、获取原神模型&#xff1a; 【游戏开发实战】下载原神模型&#xff0c;PMX转FBX&#xff0c;导入到Unity中&#xff0c;卡通渲染&#xff0c;绑定人形动画&#xff08;附Demo工程&#xff09;-CSDN博客 《原神》公测视频征集计划 一、描边pass&#xff1a;Outline 1. …

Cherno C++ P55 宏

这篇文章我们讲一下C当中的宏。其实接触过大型项目的朋友可能都被诡异的宏折磨过。 宏是在预处理当中&#xff0c;通过文本替换的方式来实现一些操作&#xff0c;这样可以不用反复的输入代码&#xff0c;帮助我们实现自动化。至于预处理的过程&#xff0c;其实就是文本编辑&am…