打包与压缩
在软件开发、数据备份和文件传输中,我们经常会遇到各种归档和压缩格式,如 ZIP、TAR、TAR.GZ、RAR、7Z 等。这些格式有些是纯打包,有些是纯压缩,有些则是打包+压缩的组合。本文将详细解析它们的区别、适用场景及优缺点。 1. 基础概念:打包 vs 压缩在讨论具体格式之前,先明确两个核心概念: 打包(Archiving):将多个文件或目录合并成一个文件,但不进行压缩。特点:保留文件结构、权限、元数据,但文件大小不变。典型格式:TAR、CPIO。 压缩(Compression):通过算法减少文件体积,但不涉及多文件管理。特点:文件变小,但通常只能压缩单个文件(除非先打包)。典型格式:GZ、BZ2、XZ、ZSTD。 关键区别: 打包 = 合并文件(如 tar) 压缩 = 减小体积(如 gzip) 打包+压缩 = 先打包再压缩(如 tar.gz) 2. 常见归档/压缩格式详解(1) 纯打包格式TAR (Tape Archive) 特点: Unix/Linux 标准打包工具,仅合并文件,不压缩。 保留...
包装函数的一些用法
在 Python 开发中,经常会遇到需要对函数进行扩展或修改其行为的情况,但又不希望直接修改函数本身的代码。这时,包装函数(也称为装饰器)就派上了大用场。它是一种非常优雅且强大的工具,能够以一种简洁的方式增强函数的功能。 一、包装函数的基本概念包装函数本质上是一个返回函数的高阶函数。它接收一个函数作为参数,对其进行包装,然后返回一个新的函数。通过使用 @ 符号,可以很方便地将包装函数应用到目标函数上。 在 Python 中,通常使用 functools.wraps 来保留被包装函数的元信息(如函数名、文档字符串等),以确保在使用装饰器后,函数的这些信息不会丢失。 二、应用场景:系统参数与用户参数的结合代码示例中,包装函数被用来解决一个非常实用的问题:当系统中需要调用一个函数时,这个函数的参数既包括用户提供的参数,也包括系统配置的参数。如果直接在每次调用时手动添加这些参数,代码会变得冗长且难以维护。而通过使用包装函数,可以将系统参数封装起来,让用户在调用时只需传入自己的参数即可。 12345678910111213141516171819202122232425from funct...
使用python进行mysql数据迁移
Alembic是一个数据库管理工具,用于管理数据库迁移。它允许你创建、应用和撤销数据库迁移,以便在数据库结构发生变化时保持版本控制。任何有关数据库变动都需要使用这个库来进行操作。这是一个python库,版本已经记录在项目下的requirements.txt文件当中。 新增字段操作如下在使用 Alembic 进行数据库迁移时,你需要通过 Alembic 的迁移脚本来实现对表结构的修改,同时确保原始数据不会被删除。以下是基于你的需求,使用 Alembic 添加一个新字段 usr_id 并设置默认值为 0 的详细步骤: 1. 初始化 Alembic 环境如果你还没有初始化 Alembic,需要先在项目中初始化它: 1alembic init alembic 这会在项目中创建一个 alembic 文件夹,其中包含 Alembic 的配置文件和迁移脚本模板。 2. 配置 Alembic编辑 alembic.ini 文件,确保其中的 sqlalchemy.url 配置正确指向你的数据库: 1sqlalchemy.url = mysql+pymysql://username:password@...
pyhon包的离线更新与迁移
如何使用 Conda 和 Pip 离线下载 Python 包在某些情况下,可能需要在没有网络连接的环境中安装 Python 包,例如在公司内网或安全环境中。为了实现这一目标,可以使用 Conda 和 Pip 提供的离线下载功能,提前将所需的包下载到本地,然后在目标环境中进行安装。以下是一个简单的指南,帮助你在离线环境中高效地管理 Python 包。 第一步:离线下载包使用 Pip 下载Pip 提供了一个非常方便的选项来离线下载包及其依赖。你可以使用以下命令下载指定的包及其依赖: 1pip download package_name 如果你有一个 requirements.txt 文件,包含多个包的依赖,可以使用以下命令一次性下载所有包: 1pip download -r requirements.txt 这会将所有包及其依赖下载到当前目录。你也可以指定下载路径,例如: 1pip download -r requirements.txt -d /path/to/download 这样,所有下载的 .whl 文件和 .tar.gz 文件都会保存到指定的目录中。 使用 Con...
VLLM-多机多卡推理部署
本教程将指导如何在多机多卡环境中部署 vLLM 推理服务,以实现高效的分布式推理。假设你已经安装了 Docker 和下载好了模型文件,并且两台服务器的模型存放路径一致。 1. 安装 NVIDIA Container Toolkit在开始之前,确保你的服务器已经安装了 NVIDIA Container Toolkit,以便 Docker 能够使用 GPU 资源。 1.1 添加 NVIDIA 容器工具包仓库运行以下命令,添加 NVIDIA 容器工具包的官方仓库: 1234curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | ...
RAG-更好的读取文本文件
以下实现综合考虑了文件检测、内存管理、编码处理、并发控制等关键因素,支持智能选择读取策略: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861...
docker-容器网络通信问题
问题背景在Docker容器化部署中,你是否遇到过以下问题? 容器IP地址动态变化(如 172.17.0.2、172.18.0.5),硬编码IP导致服务频繁断连 端口映射混乱(如 9001:9000),维护文档难以跟踪实际服务端口 多容器通信需手动维护IP列表,扩容时配置复杂度指数级上升 这些问题本质源于对Docker网络模型的误解。 一、问题根源分析1. Docker默认网络的局限性 默认网桥bridge:所有容器共享同一网段,但 无内置DNS服务,只能通过IP通信 IP动态分配:容器重启或重建后IP可能变化,导致依赖IP的配置失效 端口映射暴露过多:-p参数将容器端口映射到宿主机,易引发端口冲突 2. 传统解决方案的缺陷 静态IP绑定:通过--ip固定IP,但违背容器动态伸缩的设计理念 Host网络模式:容器直接使用宿主机网络,丧失隔离性,安全隐患大 手动维护IP列表:通过脚本或配置文件记录IP,维护成本高且易出错 二、标准化解决方案核心原则✅ 以容器名代替IP:利用Docker内置DNS实现服务发现✅ 网络隔离:通过自定义网络划分服务边...
单节点k8s安装部署文档
在 Ubuntu 中使用阿里源部署单节点 Kubernetes 集群本教程是在 Ubuntu 操作系统中使用阿里云镜像源部署单节点 Kubernetes 集群。将使用 kubeadm 工具进行部署。 前提条件: 已安装 Docker (本教程省略 Docker 安装步骤) Ubuntu 操作系统 (当前版本:Linux shumo-ai 5.11.0-27-generic #29~20.04.1-Ubuntu SMP Wed Aug 11 15:58:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux) 官方建议至少 2GB RAM 和 2 CPU 核心 稳定的网络连接(当前教程为联网教程) root 或具有 sudo 权限的用户 步骤 1: 更新系统并安装依赖 更新系统软件包列表: 1sudo apt update 安装必要的依赖包: 1sudo apt install -y apt-transport-https ca-certificates curl software-properties-common 步骤 2: 添加阿里云 ...
docker-数据目录更改
将 Docker 的存储目录从默认位置(通常是 /var/lib/docker)更改到指定的目录(例如 /data/docker)是确保程序稳定运行的必要操作。以下介绍如何在 Linux 系统上更改 Docker 的存储目录。 步骤 1:停止 Docker 服务在更改存储目录之前,必须先停止 Docker 服务,以避免数据损坏。 1sudo systemctl stop docker 步骤 2:备份现有数据(可选)如果你已经有一些数据(如镜像、容器等)在默认的 Docker 存储目录中,建议先备份这些数据。 1sudo cp -a /var/lib/docker /var/lib/docker_backup 步骤 3:创建新的存储目录创建一个新目录,用于存储 Docker 的数据。 1sudo mkdir -p /data/docker 步骤 4:更改 Docker 的存储目录Docker 使用 daemon.json 文件来配置存储目录。如果该文件不存在,需要创建它。创建或编辑 daemon.json 文件如果 /et...
离线安装MongoDB教程
离线安装MongoDB教程在CentOS 7环境下离线安装MongoDB,您可以按照以下步骤进行操作。本教程涵盖了从安装包下载到服务启动的全过程。 1. 环境准备 操作系统:Linux CentOS 7 安装包:mongodb-linux-x86_64-rhel70-4.0.27.tgz 2. 安装包下载从MongoDB官网下载安装包: 1wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.27.tgz 3. 软件安装和启动3.1 解压安装包将下载好的安装包上传到Linux服务器某个目录下,并使用以下命令解压: 1tar -zxvf mongodb-linux-x86_64-rhel70-4.0.27.tgz 3.2 移动目录将解压后的目录移动到/usr/local目录下,并改名为mongodb: 1mv mongodb-linux-x86_64-rhel70-4.0.27 /usr/local/mongodb 3.3 创建数据和日志目录进入mongodb目录,创建data目录及其子目...














