首页
关于
友链
Search
1
ESXI 一些功能调整
560 阅读
2
天翼云网关3.0/4.0超管密码
514 阅读
3
SoftEther 客户端篇
483 阅读
4
SoftEther 服务端篇
388 阅读
5
Centos安装个人网盘Alist v3教程
347 阅读
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
登录
Search
标签搜索
python
esxi
git
SoftEther
linux
apscheduler
在线
rclone
飞牛
list
列表
idm
激活码
Charles
pdf
免安装
鲁大师
图片查看器
蜂蜜浏览器
honeyview
哥特式
累计撰写
106
篇文章
累计收到
15
条评论
首页
栏目
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
页面
关于
友链
搜索到
106
篇与
的结果
2025-09-11
飞牛遇到的一些问题
1. 个人空间与实际使用不符合#!/bin/bash btrfs quota rescan -w /vol12. 回收站内容不会自动清理比如我需要清理的是网络备份这个回收站目录下的文件#!/bin/bash # 定义要清理的目录 TRASH_DIR="/vol2/1000/.@#local/trash/网络备份" # 定义日志文件位置 LOG_FILE="/vol2/1000/网络备份/clean_network_back.log" # 获取当前时间,用于日志记录 echo "=== 清理任务开始于 $(date) ===" >> "$LOG_FILE" 2>&1 # 检查目标目录是否存在 if [ -d "$TRASH_DIR" ]; then # 计算清理前的目录大小 BEFORE_SIZE=$(du -sb "$TRASH_DIR" 2>/dev/null | cut -f1) BEFORE_SIZE=${BEFORE_SIZE:-0} # 如果目录为空或不存在,设为0 # 执行删除操作,强制删除目录下的所有文件和子目录 # 使用 /bin/rm 的绝对路径以避免别名问题 /bin/rm -rf -- "$TRASH_DIR"/* >> "$LOG_FILE" 2>&1 # 计算清理后的目录大小 AFTER_SIZE=$(du -sb "$TRASH_DIR" 2>/dev/null | cut -f1) AFTER_SIZE=${AFTER_SIZE:-0} # 如果目录为空或不存在,设为0 # 计算释放的空间(字节) FREED_SPACE=$((BEFORE_SIZE - AFTER_SIZE)) # 格式化显示空间大小 format_size() { local bytes=$1 if [ $bytes -ge 1073741824 ]; then echo "$(echo "scale=2; $bytes/1073741824" | bc) GB" elif [ $bytes -ge 1048576 ]; then echo "$(echo "scale=2; $bytes/1048576" | bc) MB" elif [ $bytes -ge 1024 ]; then echo "$(echo "scale=2; $bytes/1024" | bc) KB" else echo "${bytes} B" fi } FREED_SPACE_FORMATTED=$(format_size $FREED_SPACE) echo "成功清理目录 $TRASH_DIR 下的所有内容。" >> "$LOG_FILE" 2>&1 echo "释放空间: $FREED_SPACE_FORMATTED" >> "$LOG_FILE" 2>&1 echo "清理详情: 清理前 $(format_size $BEFORE_SIZE), 清理后 $(format_size $AFTER_SIZE)" >> "$LOG_FILE" 2>&1 else echo "错误:目录 $TRASH_DIR 不存在,清理任务已中止。" >> "$LOG_FILE" 2>&1 fi echo "=== 清理任务结束于 $(date) ===" >> "$LOG_FILE" 2>&1 echo "" >> "$LOG_FILE" 2>&1将脚本放到某个目录下,比如我的放到的是**/网络备份/clean_network_back.sh使用crontab来做定时任务# 查看当前任务 crontab -l # 编辑任务 crontab -e增加一行# 分别对应秒分时天月 0 8 * * * /vol2/1000/网络备份/clean_network_back.sh
2025年09月11日
2 阅读
0 评论
0 点赞
2025-08-19
Python极速搭建局域网文件传输服务器
在日常工作中,是否遇到下面的困扰:同事急需你电脑上的资料文件,却找不到U盘聊天工具传输速度慢,文件类型受限云存储等第三方工具存在隐私泄露风险,还需要复杂配置今天我们使用Python内置神器,3秒搭建局域网文件共享服务器!你没看错,就是3秒!核心武器:HTTP服务器模块Python自带了一个强大的模块http.server,只需要一条命令就能启动文件共享服务器# 在文件所在目录执行 python -m http.server默认端口8000,浏览器访问http://your_ip:8000,就可以查看当前目录下的所有文件实测传输1GB的文件用时不到10s(千兆局域网环境)手机连接同一个局域网,同样也能在浏览器访问服务端可以查看到所有的访问记录(如上图所示)进阶使用技巧1.自定义端口将默认的8000端口替换为其他未被占用的端口python -m http.server 78792.自定义共享目录设置共享的根目录# Linux/Mac共享/share文件夹 python3 -m http.server -d /share 7879 # Windows共享D:\share文件夹 python -m http.server -d D:\share 78793.多线程性能优化http.server默认为单线程,多人使用有高并发阻塞风险,可使用socketserver.ThreadingTCPServerimport socketserver from http.server import SimpleHTTPRequestHandler handler = SimpleHTTPRequestHandler with socketserver.ThreadingTCPServer(('', 7879), handler) as httpd: httpd.serve_forever()安全提示:使用完毕后请及时关闭文件共享服务(关闭cmd命令终端窗口即可),避免长期暴露文件技术不在于复杂,而在于解决实际问题。下次需要共享文件时,无需聊天工具来回发送,也不必寻找U盘,只需打开终端,一行命令开启专属高速文件共享通道!
2025年08月19日
7 阅读
0 评论
0 点赞
2025-08-12
使用GitHub Action 自动构建 RustDesk 客户端
1. 安装rustdeskdocker-compose 文件:假设你的域名是rustdesk.test.comservices: rustdeskapi: container_name: rustdeskapi ports: - 21114:21114 - 21115:21115 - 21116:21116 - 21116:21116/udp - 21117:21117 - 21118:21118 - 21119:21119 image: lejianwen/rustdesk-server-s6:latest environment: RELAY: "rustdesk.test.com:21117" #中继服务器:21117 ENCRYPTED_ONLY: 1 MUST_LOGIN: Y #默认为N,设置为Y 则必须登录才能链接 TZ: Asia/Shanghai RUSTDESK_API_RUSTDESK_ID_SERVER: "rustdesk.test.com:21116" #ID服务器 RUSTDESK_API_RUSTDESK_API_SERVER: "https://rustdesk.test.com" #API服务器 RUSTDESK_API_RUSTDESK_KEY: "" # 首次运行后给的 RUSTDESK_API_JWT_KEY: "随便一个" # 自定义JWT KEY,为空则不启用JWT,如果没使用lejianwen/rustdesk-server中的MUST_LOGIN,建议设置为空 RUSTDESK_API_RUSTDESK_WS_HOST: "wss://rustdesk.test.com" volumes: - ./server:/data - ./api:/app/data #将数据库挂载 restart: unless-stoppednginx文件:参考:HTTPS Reverse Proxy · lejianwen/rustdesk-api Wikiserver { server_name <server>; listen 443 ssl; ssl_certificate /etc/nginx/ssl/<server>/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/<server>/privkey.pem; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://rustdesk-api:21114/; } location /ws/id { proxy_pass http://rustdesk-server:21118; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /ws/relay { proxy_pass http://rustdesk-server:21119; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { if ($host = <server>) { return 301 https://$host$request_uri; } server_name <server>; listen 80; return 404; }2. Fork Rustdesk仓库rustdesk/hbb_commonrustdesk/rustdesk2.1 拉取 Fork 后的代码请注意,替换仓库地址为你fork后的仓库地址,而不是直接复制我下面的命令 # 可选:如果需要使用代理 # git config --global http.proxy http://127.0.0.1:10808 # git config --global https.proxy http://127.0.0.1:10808 # 拉取仓库代码到本地 请替换为你fork后的仓库地址 git clone https://github.com/irains/hbb_common.git git clone https://github.com/irains/rustdesk.git 3. 修改 hbb_common代码打开 hbb_common 仓库下的 src/config.rs文件,修改 101-102 行 的默认服务器和密钥为你自己的服务器和密钥。 3.1 推送修改后的代码# 将修改的代码添加到暂存区 git add . # 将代码提交到本地仓库 git commit -m "修改默认的服务器和 key" # 将本地仓库代码推送到远程仓库 如果你没有登录过GitHub会要求你登录github git push 3.2 查看最新提交的 commit IDgit log --oneline我这里提交后的commit id是b8d80ca,可用于后续验证rustdesk服务器和key是否修改成功4. 修改 rustdesk 仓库代码我们切换到克隆下来的rustdesk代码目录下,按照下面的方式修改子模块地址并更新。4.1 更新 .gitmodules打开并编辑 .gitmodules 文件,将 url 替换为你Fork后的 hbb_common 仓库地址。比如我fork后的仓库地址是https://github.com/irains/hbb_common\则将 https://github.com/rustdesk/hbb_common地址换为前面这个地址即可,记住是hbb_common的地址,而不是rustdesk仓库的地址4.2 更新子模块将上面修改好的代码保存,执行下面的命令更新子模块到最新的commit idgit submodule sync git submodule update --remote如果上面的方法不行,用下面这个cd libs/hbb_common git checkout <上面提到的版本号> cd ../.. git add libs/hbb_common git commit -m "Pin submodule to specific version"4.3 提交并推送代码git add . git commit -m "修改子模块仓库地址" git push4.4 确认 Commit ID 更新代码推送完毕后,进入你Fork 后的 rustdesk 仓库的 libs 目录下,查看 hbb_common 后面的 commit id,确保它是3.2提到的b8d80ca(这个值每个人的是不同的),否则请回到上面的步骤重新检查是否遗漏了某个操作。 5. 触发 GitHub Action 构建5.1 创建 Tag在本地 rustdesk 仓库中创建一个新 tag,例如 1.3.9,请使用 固定格式 (如 1.3.9 或 v1.3.9),以便于自动匹配构建规则。git tag -a 1.3.9 -m "修改内置服务器和 key"5.2 增加API_SERVER来到rustdesk项目,settings --> Secrets and variables --> new repository secretname:API_SERVERsecret:RUSTDESK_API_RUSTDESK_API_SERVER的值5.3 触发 GitHub Actions 构建在 rustdesk 仓库中,进入 Actions 页面,点击下面图中的按钮启用自动构建。启用后回到本地rustdesk代码中使用下面的命令将tag推送到Github后将自动开始构建。git push --tags5.4 下载构建好的客户端Tag推送完毕后会出现下面的构建进度。 等待 Action 执行完成后(时间比较长,一个半小时左右才能全部构建完成),进入 Releases 页面,即可下载构建好的客户端并使用。
2025年08月12日
17 阅读
0 评论
0 点赞
2025-08-07
Windows使用wsl开发
安装wsl1. 安装wsl --install2. 重启电脑使用可以直接在资源管理器里面输入这个链接\\wsl$\Ubuntu\home\你的用户名cmd里面使用wsl -d Ubuntu # 默认root用户 ubuntu config --default-user root
2025年08月07日
4 阅读
0 评论
0 点赞
2025-07-12
rclone 配置同步
配置 MinIO 连接示例:n) New remote name> myminio Storage> s3 provider> Other env_auth> false access_key_id> YOUR_MINIO_ACCESS_KEY secret_access_key> YOUR_MINIO_SECRET_KEY region> us-east-1 endpoint> http://your-minio-server:9000 location_constraint> acl> storage_class> 配置 AWS S3 连接示例:n) New remote name> mys3 Storage> s3 provider> AWS env_auth> false access_key_id> YOUR_AWS_ACCESS_KEY secret_access_key> YOUR_AWS_SECRET_KEY region> ap-northeast-1 endpoint> location_constraint> acl> storage_class> 基本同步命令单向同步(MinIO → S3)rclone sync myminio:bucket1 mys3:bucket2双向同步(保持两端一致)rclone bisync myminio:bucket1 mys3:bucket2高级同步选项增量同步(只传输变化的部分)rclone sync --update myminio:bucket1 mys3:bucket2
2025年07月12日
6 阅读
0 评论
0 点赞
2025-07-10
minio命令
客户端配置# 配置别名(连接远程MinIO服务器) mc alias set myminio http://localhost:9000 ACCESS_KEY SECRET_KEY # 示例: mc alias set myminio http://127.0.0.1:9000 username password # 列出所有配置的别名 mc alias list存储桶操作# 创建存储桶 mc mb myminio/mybucket # 列出所有存储桶 mc ls myminio # 删除空存储桶 mc rb myminio/mybucket # 强制删除非空存储桶 mc rb --force myminio/mybucket对象操作# 上传文件 mc cp localfile.txt myminio/mybucket/ # 下载文件 mc cp myminio/mybucket/remotefile.txt . # 列出存储桶内容 mc ls myminio/mybucket # 删除对象 mc rm myminio/mybucket/file.txt # 递归删除目录 mc rm --recursive myminio/mybucket/mydir策略管理# 设置存储桶为公开可读 mc anonymous set download myminio/mybucket # 设置存储桶为私有 mc anonymous set none myminio/mybucket # 添加用户 mc admin user add myminio newuser newpassword # 设置用户策略 mc admin policy set myminio readwrite user=newuser监控与维护# 查看服务器信息 mc admin info myminio # 查看服务健康状态 mc admin heal myminio # 查看存储桶使用情况 mc du myminio/mybucket高级功能# 设置对象保留策略 mc retention set --default GOVERNANCE 30d myminio/mybucket # 设置对象锁定(合规模式) mc retention set --default COMPLIANCE 30d myminio/mybucket # 启用版本控制 mc version enable myminio/mybucket # 列出对象版本 mc ls --versions myminio/mybucket管理用户mc admin user # 创建用户 mc admin user add <alias> <username> <password> # 示例:创建名为reports的用户 mc admin user add myminio reports user123456 # 列出所有用户 mc admin user list <alias> # 示例:列出myminio的所有用户 mc admin user list myminio # 查看用户信息 mc admin user info <alias> <username> # 示例:查看reports用户信息 mc admin user info myminio reports # 禁用用户 mc admin user disable <alias> <username> # 示例:禁用reports用户 mc admin user disable myminio reports # 启用用户 mc admin user enable <alias> <username> # 示例:重新启用reports用户 mc admin user enable myminio reports # 删除用户 mc admin user remove <alias> <username> # 示例:删除reports用户 mc admin user remove myminio reports用户策略管理# 为用户分配策略 mc admin policy attach <alias> <policy-name> --user=<username> # 示例:为reports用户分配readonly策略 mc admin policy attach myminio readonly --user=reports # 查看用户当前策略 mc admin policy info <alias> --user=<username> # 示例:查看reports用户的策略 mc admin policy info myminio --user=reports # 解除用户策略 mc admin policy detach <alias> <policy-name> --user=<username> # 示例:移除reports用户的readonly策略 mc admin policy detach myminio readonly --user=reports用户密钥管理# 修改用户密码 mc admin user update <alias> <username> <new-password> # 示例:修改reports用户密码 mc admin user update myminio reports newpassword123 # 生成临时访问密钥 mc admin user svcacct add <alias> <username> # 示例:为reports用户创建服务账户 mc admin user svcacct add myminio reports高级用户配置# 创建带策略的新用户(一步完成) mc admin user add <alias> <username> <password> --policy-name=<policy> # 示例:创建带writeonly策略的用户 mc admin user add myminio uploader upload123 --policy-name=writeonly # 设置用户描述信息 mc admin user update <alias> <username> --description="User description" # 示例:设置用户描述 mc admin user update myminio reports --description="Monthly reports generator"用户管理实际使用案例# 1. 创建管理员用户 mc admin user add myminio admin admin123 mc admin policy attach myminio consoleAdmin --user=admin # 2. 创建只读用户 mc admin user add myminio viewer view123 mc admin policy attach myminio readonly --user=viewer # 3. 创建特定存储桶权限用户 # 先创建自定义策略文件bucket-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::reports-bucket/*"] } ] } # 添加策略 mc admin policy create myminio reports-reader bucket-policy.json # 创建用户并附加策略 mc admin user add myminio report-reader reader123 mc admin policy attach myminio reports-reader --user=report-reader配置同步mc mirror -w old new
2025年07月10日
7 阅读
0 评论
0 点赞
2025-06-24
github代理地址
1. 使用方法直接在对应的GitHub地址前面加内容2. 维护的地址https://ghm.078465.xyz/
2025年06月24日
11 阅读
0 评论
0 点赞
2025-05-31
护核纪元 服务器安装教程 Windows
其实其他平台都大差不差,都可以服用下载steamcmd下载后直接解压,进去后只有一个steamcmd.exe,运行它,没有运行的话在cmd里面运行steamcmd.exe安装护核纪元服务端login anonymous app_update 1963720安装完后找到游戏目录在steamcmd同级目录下的里面steamapps\common双击运行Launch.bat会产生一下服务器文件路径:C:\Users\Administrator\AppData\LocalLow\Pugstorm\Core Keeper\DedicatedServerServerConfig.json -- 服务器配置文件{ "gameId": "2222222222222222222222", //用于服务器的游戏ID。需要至少28个字符的字母和数字,不包括Y,y,x,0,O.不填或无效表示将在开始时生成一个新的ID。这里我用了一堆2来举例 "world": 0, //表示使用哪个世界文件,0将会使用worlds文件夹中0.world.gzip "worldName": "Core Keeper", //服务器名称 "worldSeed": 0, //生成新世界时使用的种子,设置为0将会随机 "maxNumberPlayers": 100, //最大游玩人数 "maxNumberPacketsSentPerFrame": 1, "networkSendRate": 20, //网络配置,不懂请无视 "worldMode": 0, //为世界设置世界模式。可以是普通(0),困难(1),创意(2),休闲(4)。注意:目前不支持在创意和非创意世界之间切换。 "seasonOverride": -1 //通过设置为None (0), Easter (1), Halloween (2), Christmas (3), Valentine (4), Anniversary (5), CherryBlossom(6)中的任何一个来覆盖当前季节。-1是根据系统日期设置的默认设置。 }复制游戏世界本地的游戏世界安装steam的路径\userdata\你的steamid\1621690\remote\worlds运行过一次之后,会在服务器产生的文件里面有一个worlds文件,复制到里面去加载modhttps://mod.io/g/corekeeper下载mod,是压缩包,解压后放在服务器的steamapps\common\Core Keeper Dedicated Server\CoreKeeperServer_Data\StreamingAssets\Modstips:没有Mods的话新建一个查看mod是否加载运行服务器之后,可以在CoreKeeperServerLog.txt日志里面看到
2025年05月31日
16 阅读
0 评论
0 点赞
2025-04-18
docker安装lucky
1. 使用docker-compose安装luckyservices: lucky: image: gdy666/lucky:latest network_mode: host restart: always volumes: - ./data:/goodluck2. 安装后,使用ddns通过指令获取ipv6curl 6.ipw.cn这时候发现没有curl命令,通过下面的方法,给容器安装curl# 在宿主机操作 wget https://github.com/moparisthebest/static-curl/releases/download/v8.4.0/curl-amd64 -O curl-static chmod +x curl-static docker cp curl-static 容器名:/usr/bin/curl docker exec 容器名 curl --version
2025年04月18日
73 阅读
0 评论
0 点赞
2025-03-13
python库 faker
faker,一个非常厉害的 Python 库Github地址:https://github.com/joke2k/faker在软件开发和测试过程中,生成真实可信的测试数据是一项重要但耗时的工作。Python的faker库提供了一个简单而强大的解决方案,它能够生成各种类型的虚拟数据,包括个人信息、地址、公司信息等。这些数据看起来十分真实,非常适合用于开发测试、数据库填充和应用程序演示。安装基础安装使用pip包管理器进行安装:pip install faker基本功能生成个人信息faker库提供了丰富的个人信息生成功能,包括姓名、地址、电话号码等。这些数据可以按照不同的语言和地区格式生成,确保了数据的本地化和真实性。from faker import Faker # 创建Faker实例 fake = Faker('zh_CN') # 使用中文本地化 # 生成个人基本信息 print(f"姓名: {fake.name()}") print(f"地址: {fake.address()}") print(f"手机号: {fake.phone_number()}") print(f"电子邮箱: {fake.email()}") print(f"身份证号: {fake.ssn()}")生成公司信息在企业应用开发中,经常需要模拟公司相关的信息。faker提供了完整的公司信息生成功能,包括公司名称、职位名称、营业执照号等数据。from faker import Faker fake = Faker('zh_CN') # 生成公司相关信息 print(f"公司名称: {fake.company()}") print(f"职位名称: {fake.job()}") print(f"公司口号: {fake.catch_phrase()}") print(f"营业执照号: {fake.company_prefix()}") print(f"公司地址: {fake.company_suffix()}")生成日期和时间faker支持生成各种格式的日期和时间数据,可以指定日期范围,生成过去或未来的随机时间。这对于创建时间序列数据或测试日期相关功能特别有用。from faker import Faker from datetime import datetime, timedelta fake = Faker() # 生成日期时间数据 print(f"当前时间: {fake.date_time_this_month()}") print(f"过去日期: {fake.date_time_between(start_date='-30d', end_date='now')}") print(f"未来日期: {fake.future_date(end_date='+30d')}") print(f"时间戳: {fake.unix_time()}")高级功能自定义数据生成器faker允许创建自定义的数据生成器,可以根据特定需求定义数据的生成规则。这种灵活性使其能够适应各种特殊的数据生成需求。from faker import Faker from faker.providers import BaseProvider class CustomProvider(BaseProvider): def custom_product_code(self): return f"PRD-{self.random_int(min=1000, max=9999)}" def custom_status(self): statuses = ['待处理', '处理中', '已完成', '已取消'] return self.random_element(statuses) fake = Faker('zh_CN') fake.add_provider(CustomProvider) # 使用自定义生成器 print(f"产品编码: {fake.custom_product_code()}") print(f"订单状态: {fake.custom_status()}")多语言支持faker提供了出色的多语言支持,可以根据不同地区的特点生成本地化数据。这对于开发国际化应用或测试多语言功能非常有帮助。from faker import Faker # 创建多语言Faker实例 fake_cn = Faker('zh_CN') # 中文 fake_en = Faker('en_US') # 英文 fake_jp = Faker('ja_JP') # 日文 # 生成不同语言的数据 print("中文姓名:", fake_cn.name()) print("英文姓名:", fake_en.name()) print("日文姓名:", fake_jp.name()) print("中文地址:", fake_cn.address()) print("英文地址:", fake_en.address()) print("日文地址:", fake_jp.address())实际应用场景数据库测试数据生成在开发过程中,经常需要生成大量测试数据来填充数据库。使用faker可以快速生成符合要求的测试数据,帮助开发人员进行功能测试和性能测试。from faker import Faker import sqlite3 class TestDataGenerator: def __init__(self): self.fake = Faker('zh_CN') self.conn = sqlite3.connect('test.db') self.cursor = self.conn.cursor() def create_tables(self): self.cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, email TEXT, address TEXT, phone TEXT ) ''') def generate_user_data(self, count): for _ in range(count): self.cursor.execute(''' INSERT INTO users (name, email, address, phone) VALUES (?, ?, ?, ?) ''', ( self.fake.name(), self.fake.email(), self.fake.address(), self.fake.phone_number() )) self.conn.commit() # 使用示例 generator = TestDataGenerator() generator.create_tables() generator.generate_user_data(100)API测试数据模拟在进行API测试时,需要模拟各种请求数据。faker可以帮助生成符合API要求的测试数据,提高测试效率和覆盖率。from faker import Faker import json class APITestDataGenerator: def __init__(self): self.fake = Faker('zh_CN') def generate_user_payload(self): return { "user": { "name": self.fake.name(), "email": self.fake.email(), "phone": self.fake.phone_number(), "address": { "street": self.fake.street_address(), "city": self.fake.city(), "postcode": self.fake.postcode() } } } def generate_order_payload(self): return { "order": { "order_id": self.fake.uuid4(), "customer_name": self.fake.name(), "product_name": self.fake.word(), "quantity": self.fake.random_int(min=1, max=10), "order_date": self.fake.date_time_this_month().isoformat() } } # 使用示例 generator = APITestDataGenerator() user_data = generator.generate_user_payload() order_data = generator.generate_order_payload() print(json.dumps(user_data, indent=2, ensure_ascii=False)) print(json.dumps(order_data, indent=2, ensure_ascii=False))总结Python faker库为开发者提供了一个强大而灵活的测试数据生成解决方案。通过其丰富的内置数据生成器和自定义功能,开发者可以轻松创建各种类型的模拟数据。faker的多语言支持和本地化特性使其特别适合国际化应用的开发和测试。在实际应用中,从简单的个人信息生成到复杂的数据库测试数据填充,faker都展现出了优秀的性能和可靠性。
2025年03月13日
65 阅读
0 评论
0 点赞
2025-03-13
Python异步任务调度:任务队列Celery
Python异步任务调度:最牛逼的任务队列神器Celery在现代应用中,异步任务调度无疑是提升性能和响应速度的关键之一。尤其在处理高并发、长时间运行任务时,如何让后台任务异步执行成为了开发者面临的一个重要问题。Python中,Celery 是一个强大且广泛使用的异步任务队列工具,它让你可以轻松处理并发任务、定时任务以及任务调度。那么,今天我们就来深入了解Celery以及如何在Python项目中使用它。什么是Celery?Celery 是一个分布式的任务队列系统,支持异步任务执行和定时任务调度。通过Celery,你可以把一些耗时的操作,比如发送邮件、视频处理、图像处理等从主流程中提取出来,交给Celery去处理,这样就能有效提升系统的响应速度和用户体验。Celery通常与消息代理(如RabbitMQ或Redis)结合使用,负责将任务分配给多个工作进程进行异步执行。它的工作原理就像是一个生产者-消费者模式,生产者将任务放入队列,消费者从队列中取出任务并执行。安装Celery首先,我们需要安装Celery。你可以通过pip命令轻松安装:pip install celery使用Celery调度任务让我们通过一个简单的例子来了解如何使用Celery调度异步任务。假设你正在开发一个网站,并且想要在用户注册后发送一个欢迎邮件,而发送邮件是一个耗时操作。为了避免阻塞用户注册的流程,我们希望将邮件发送任务放到Celery中异步执行。步骤1:创建一个Celery实例首先,我们需要创建一个Celery应用。我们可以将其配置成在一个叫做celery.py的文件中:from celery import Celery # 创建一个Celery实例,配置消息队列为Redis app = Celery('tasks', broker='redis://localhost:6379/0') # 定义任务 @app.task def send_welcome_email(user_email): print(f"Sending welcome email to {user_email}") # 这里可以调用发送邮件的逻辑 return f"Email sent to {user_email}"在上面的代码中:Celery('tasks', broker='redis://localhost:6379/0')这一行代码创建了一个Celery应用,并指定了消息代理使用Redis。send_welcome_email是我们定义的一个简单任务,它会模拟发送邮件。步骤2:启动Celery Worker在开发过程中,你可以启动Celery Worker来处理任务。进入项目根目录,执行以下命令:celery -A celery worker --loglevel=info这个命令会启动Celery的工作进程(worker)。它会从消息队列中取出任务并执行。你会看到类似以下的输出,表示Celery Worker已经准备好接收任务了。[2025-02-14 15:00:00,000: INFO/MainProcess] Connected to redis://localhost:6379/0 [2025-02-14 15:00:01,000: INFO/MainProcess] mingle: searching for neighbors [2025-02-14 15:00:02,000: INFO/MainProcess] mingle: all alone [2025-02-14 15:00:02,000: INFO/MainProcess] celery@hostname ready.步骤3:调用任务接下来,我们可以通过Python脚本来调用这个异步任务:from celery import Celery from tasks import send_welcome_email # 调用异步任务 send_welcome_email.delay('user@example.com')send_welcome_email.delay('user@example.com') 是Celery提供的一个异步调用方法,使用delay方法将任务提交到队列中,而不是直接执行。这时,Celery Worker会从队列中取出任务并执行。当邮件发送完成后,你会看到终端输出了类似:Sending welcome email to user@example.com定时任务调度除了异步任务,Celery 还支持定时任务调度,类似于Linux的cron任务。我们可以利用celery-beat扩展来实现定时任务。让我们来写个简单的定时任务,比如每小时检查一次用户的邮箱是否有效。步骤1:安装celery-beatpip install celery[redis] celery[redis]==5.0.5 pip install celery[beat]步骤2:配置定时任务在celery.py中添加如下配置:from celery import Celery from celery.schedules import crontab app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def check_email_validity(): print("Checking email validity for users...") # 定义定时任务,每小时执行一次 app.conf.beat_schedule = { 'check-email-validity-every-hour': { 'task': 'tasks.check_email_validity', 'schedule': crontab(minute=0, hour='*'), # 每小时的第0分钟执行 }, }步骤3:启动Celery Beat除了启动Worker,我们还需要启动Celery Beat来调度定时任务:celery -A celery beat --loglevel=info这时,check_email_validity任务会每小时自动执行一次。总结Celery是一个非常强大的Python任务队列工具,适合用于处理异步任务和定时任务。在开发现代应用时,Celery帮助我们将耗时任务从主流程中分离出来,从而提升系统性能和响应速度。通过简单的配置和几行代码,你就能在项目中轻松集成Celery,实现异步执行任务和定时任务调度。无论你是开发Web应用、后台任务还是周期性调度任务,Celery都能成为你最牛逼的得力助手!
2025年03月13日
17 阅读
0 评论
0 点赞
2025-02-24
Ai使用的一些方法
DeepSeek配合Kimi生成PPTDeepSeek里面的生成更加丰富,可以使用DeepSeek来生成大纲,再用kimi生成PPT我是谁,我需要什么,我的要求是什么示例:我是一名ai教师,需要做一个AI行业使用教程的PPT大纲,我需要你生成一份PPT大纲,并以markdown的形式输出给我kimi在kimi里面,把ds生成的内容丢给它,等待一会便可以生成ppt,最后只需要选择模板,创建好后便可下载DeepSeek生成材料一、材料撰写,得心应手场景:年终总结、工作汇报、调研报告等指令模板:“以【XX精神】为指导,结合【XX政策】,重点突出【具体成果】,并提出【下一步计划】,注意体现高政治站位” 案例:“请按照‘三个强化+两个抓手’的框架,撰写一篇关于乡村振兴的工作汇报,并引用2024年最新政策文件”“请帮我撰写一篇关于基层党建工作的年终总结,要求体现党建引领作用,并附上具体案例和数据支撑”二、公文写作,高效规范场景:通知、函件、方案起草等指令模板:“根据【XX单位】要求,以【红头文件格式】生成关于【XX工作】的通知,内容包括【时间、地点、责任人】并以‘特此通知’结尾” 案例:“请模拟省委办公厅口吻,起草一份关于防汛工作的紧急预案,重点列出应急响应分级标准。”“请帮我起草一份关于开展安全生产大检查的通知,要求明确检查范围、时间安排和工作要求。”三、会议辅助,事半功倍场景:领导发言、座谈记录、会议纪要等指令模板:“请提炼【XX会议】的核心精神,并按照 “第一议题+贯彻意见+责任分解”的结构,生成一篇10分钟左右的讲话稿,结尾加上‘请同志们抓好落实’。” “请将这份2万字的调研报告压缩成500字左右的汇报PPT大纲,每页使用加粗关键词和数据对比图进行展示。” 案例:“请帮我整理一份关于学习贯彻党的二十大精神座谈会的会议纪要,要求重点记录领导讲话精神和与会人员发言要点” 四、即兴发言,从容应对场景:领导突然要求发言指令模板:“请生成3条谦虚表态的金句,内容包括感谢领导指导、自我反思不足和下一步改进方向,语气要诚恳。” 案例:“请帮我准备一段在项目推进会上的即兴发言,要求简短有力,并表达对项目成功的信心。”五、党建工作,规范高效场景:民主生活会、述职报告等指令模板:“请按照‘三查三改’的逻辑生成一份党支部整改清单,内容包括查思想根源(引用二十大金句)、查工作短板(用数据对比)、查作风隐患(结合巡察反馈)。”“请以‘学史力行’为主题,撰写一篇书记述职报告的结尾升华段,要求使用排比句式,增强气势。” 案例:“请帮我撰写一份关于党史学习教育专题民主生活会的发言材料,要求结合自身实际,认真开展批评与自我批评。”六、舆情应对,及时有效场景:突发舆情事件指令模板:“请生成一份舆情回应模板,内容包括承认事实(不推卸责任)、处置进展(用时间节点)、长效机制(建章立制)和情感共鸣(使用方言金句)。”“请模拟卫健委回应公众对疫苗接种的质疑,要求包含专家解读、暖心案例和表情包。” 案例:“请帮我起草一份关于网络谣言的澄清声明,要求语气尘定,并提供事实依据。” (注:文中“语气尘定”可能是“语气沉稳”的笔误 )
2025年02月24日
45 阅读
1 评论
0 点赞
2025-01-22
Sublime Text 4200激活【官方安装包】,Windows+MacOS
Sublime Text 4200激活直接使用 激活好的文件通过网盘分享的文件:sublime_text_4192.exe链接: https://pan.baidu.com/s/1aBBmLUd4mEs5t8YiFqze7Q?pwd=15f8 提取码: 15f8官网下载,使用 sublime 替换直接使用 sublime text 打开 sublime_text.exe 文件,然后查找替换原始的:0fb6 5105 83f2 0144替换完毕的:c641 0501 31d2 9044然后保存,sublime_text.exe,就可以了官网下载,使用 hexed.it 替换先官网下载 4200 版本的 sublime textDownload - Sublime Text使用以下网站https://hexed.it/查找替换将89 D9 FF 50 38 EB 02 31 C0 48 8B 8E D8 04 00 00 0F B6 51 05 83 F2 01 44 8D 04 55 04 00 00 00 01 D2 80 79 04 00 44 0F替换成:89 D9 FF 50 38 EB 02 31 C0 48 8B 8E D8 04 00 00 C6 41 05 01 31 D2 90 44 8D 04 55 04 00 00 00 01 D2 80 79 04 00 44 0FSublime Text 4180激活【官方安装包】,Windows+MacOS打开Sublime Text官网【https://sublimetext.com】下载对应你系统的程序安装包并安装安装完成后...【Win版激活破解】找到你的Sublime Text安装目录下的【sublime_text.exe】文件比如我的是【D:\Program Files\Sublime Text\sublime_text.exe】直接当前文件夹复制粘贴备份一份【sublime_text.exe】,已经很熟练的同学,可以不备份,直接省略这一步方式一:1、双击可执行程序【sublime_text.exe】2、将【sublime_text.exe】文件拖入刚打开的Sublime Text窗口Tips:对,你没看错,用自己打开自己3、按快捷键【Ctrl + H】调出“查找和替换”窗口【Find】一栏输入【8079 0500 0f94 c2】【Replace】一栏输入【c641 0501 b200 90】点击【Replace】按钮,完成替换4、按快捷键【Ctrl + Shift + S】另存为...保存到桌面,命名为【sublime_text.exe】5、剪切桌面新保存的【sublime_text.exe】文件替换原安装目录下的【sublime_text.exe】文件方式二:1、浏览器打开【https://hexed.it】2、点击【打开文件】选择你的Sublime Text安装目录下的【sublime_text.exe】3、在网页页面右边【搜索框】中输入【807905000F94C2】回车选中【启用替换】,在【替换为】一栏输入【C6410501B20090】点击【替换】按钮,完成替换4、点击【另存为】保存文件到本地桌面,命名为【sublime_text.exe】5、剪切桌面新保存的【sublime_text.exe】文件替换原安装目录下的【sublime_text.exe】文件任一方式成功激活后的信息如下,显示Unlimited User License【Mac版激活破解】1、打开App Store搜索【Hex Fiend】并安装2、打开Hex Fiend,将【访达 -> 应用程序 -> Sublime Text右键[显示包内容] -> Contents -> MacOS -> sublime_text】文件拖至Hex Fiend中3、选择Hex Fiend的菜单栏【Edit -> Find -> Find...】在【Find】一栏复制粘贴【807905000F94C2】在【Raplace】一栏复制粘贴【C6410501B20090】点击【Replace All】,完成替换保存文件并关闭退出Hex FiendTips: 本来点击【Replace】就可以,但发现少数人没查找就替换,导致其实并未修改替换就保存文件退出了,所以直接改成点击【Replace All】,就解决了出现没替换就保存的情况4、打开【终端】,如果你没有移动过终端位置,默认位置应该是:【启动台 -> 其他 -> 终端】结合多数人可能会出现的各种问题,推荐使用以下方法执行命令:a、在终端里复制粘贴命令【sudo xattr -cr /Applications/Sublime\ Text.app】,回车执行b、执行完上一条语句会提示输入密码,输入你的开机密码(Tips: 你在输入密码时终端里是什么都不会出现的,你尽管输,一定要输正确哦,输入完回车即可)c、接着复制粘贴命令【codesign --remove-signature /Applications/Sublime\ Text.app】成功激活后,信息如下:情况总结:第1种情况:知道自己终端权限够的人,这只适合少数人只需要执行一条命令【codesign --remove-signature /Applications/Sublime\ Text.app】第2种情况:会出现【应用程序“Sublime Text”无法打开】提示,但懂得手动处理Q4问题的人只需要执行一条命令【sudo codesign --remove-signature /Applications/Sublime\ Text.app】执行完会提示输入密码,输入开机密码即可后续打开Sublime Text时手动处理遇到的Q4问题第3种情况:我基本没动过终端,也不想手动处理Q4问题那就使用推荐的方法:按第4点里的abc操作Tips: Q4指下面【Mac版:Q&A】里的Q4【Mac版:Q&A】Q1、Mac版Sublime Text如何安装(新手问题)打开【访达】,双击官网下载的安装包【sublime_text_build_4180_mac.zip】文件,会自动解压出一个带图标的【Sublime Text】App文件将【Sublime Text】App文件拖拽至访达左边窗口的【应用程序】目录,即安装完成Q2、编码与路径问题如果你复制粘贴代码执行,却没成功,不管是复制粘贴之后文本编码被改还是路径不对问题,都按以下操作:在终端界面手动输入【sudo xattr -cr 】(注意cr后面有个空格),接着把你的路径下的【Sublime Text】程序拖至终端窗口里(注意是Sublime Text程序,不是1-3点的那个sublime_text),回车执行输入开机密码,接着输入【codesign --remove-signature 】(同样signature后面有个空格),再拖拽Sublime Text程序进来,回车执行Q3、提示【应用程序“Sublime Text”无法打开】命令执行权限不够,在终端里第一次执行的那条命令前加sudo,执行后需要输入开机密码,之后的命令可不加sudoQ4、提示【无法打开“Sublime Text”,因为无法验证开发者】看到这个错误,点击取消,打开【系统设置 -> 隐私与安全性】下拉到【安全性】那一项,可以看到下方有个提示【已阻止使用“Sublime Text”,因为来自身份不明的开发者】点击后面【仍要打开】,输入开机密码后出现的提示,选择【打开】,就解决了,以后打开Sublime Text就不会出现这个问题了
2025年01月22日
320 阅读
0 评论
0 点赞
2025-01-14
python网络编程:ZeroMQ实战指南
想写分布式应用却被Socket编程折腾得够呛?今天给大家介绍一个超强的网络通信库:ZeroMQ(也叫ØMQ)。它不仅简单易用,性能还贼棒!让我们一起来玩转这个神器!1. 为什么选ZeroMQ?传统Socket编程就像用电报机发消息:又慢又容易出错。而ZeroMQ就像用微信聊天:简单、快速、可靠。它能帮你:轻松实现进程间通信搞定分布式系统处理高并发场景2. 快速入门先安装ZeroMQ的Python绑定:pip install pyzmq2.1 最简单的例子:请求-响应模式服务端代码(server.py):import zmq import time context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") print("服务器已启动,等待客户端连接...") while True: # 等待客户端请求 message = socket.recv_string() print(f"收到请求: {message}") # 模拟处理时间 time.sleep(1) # 发送响应 response = f"收到你的消息:{message}" socket.send_string(response)客户端代码(client.py):import zmq context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") for i in range(3): message = f"Hello {i}" print(f"发送请求: {message}") # 发送请求 socket.send_string(message) # 等待响应 response = socket.recv_string() print(f"收到响应: {response}\n")是不是超简单?运行效果就像微信对话一样:发消息→等回复→收到回复。3. 进阶应用:发布-订阅模式这个模式特别适合做消息推送,比如气象站向多个用户推送天气数据。发布者代码(publisher.py):import zmq import time import random def weather_update(): return { "温度": round(random.uniform(20, 30), 1), "湿度": round(random.uniform(40, 70), 1) } context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5556") print("气象站启动...") while True: data = weather_update() message = f"北京,{data['温度']},{data['湿度']}" socket.send_string(message) print(f"发布天气数据: {message}") time.sleep(2)订阅者代码(subscriber.py):import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5556") socket.setsockopt_string(zmq.SUBSCRIBE, "北京") print("天气监测站已连接,等待数据...") while True: message = socket.recv_string() city, temp, humidity = message.split(',') print(f"\n{city}实时天气:") print(f"温度: {temp}°C") print(f"湿度: {humidity}%")4. 实战项目:简单的分布式计算系统来个实用的例子:主节点分发任务,工作节点处理任务。任务分发器(dispatcher.py):import zmq import random import time context = zmq.Context() sender = context.socket(zmq.PUSH) sender.bind("tcp://*:5557") collector = context.socket(zmq.PULL) collector.bind("tcp://*:5558") print("任务分发系统启动...") # 发送任务 tasks_sent = 0 while tasks_sent < 10: # 创建一个计算任务 data = random.randint(1, 100) sender.send_json({ "task_id": tasks_sent, "data": data }) print(f"发送任务 {tasks_sent}: 计算{data}的平方") tasks_sent += 1 # 接收结果 results = [] while len(results) < 10: result = collector.recv_json() results.append(result) print(f"收到任务{result['task_id']}的结果: {result['result']}") print("\n所有任务完成!")工作节点(worker.py):import zmq import time import random context = zmq.Context() receiver = context.socket(zmq.PULL) receiver.connect("tcp://localhost:5557") sender = context.socket(zmq.PUSH) sender.connect("tcp://localhost:5558") print("工作节点已启动,等待任务...") while True: task = receiver.recv_json() # 模拟计算过程 time.sleep(random.random()) # 计算结果 result = task['data'] ** 2 # 发送结果 sender.send_json({ "task_id": task['task_id'], "result": result }) print(f"完成任务{task['task_id']}: {task['data']}的平方是{result}")5. 实用技巧5.1 消息模式选择指南REQ/REP:适合客户端-服务器模型PUB/SUB:适合数据广播场景PUSH/PULL:适合任务分发场景5.2 错误处理import zmq import zmq.error try: socket.send_string("消息", zmq.NOBLOCK) except zmq.error.Again: print("发送缓冲区已满,消息未发送")5.3 超时处理import zmq from zmq.error import Again poller = zmq.Poller() poller.register(socket, zmq.POLLIN) # 等待1秒 if poller.poll(1000): message = socket.recv_string() else: print("接收超时")6. 性能优化小贴士使用合适的消息大小:太小:网络开销占比大太大:延迟增加建议:1KB到1MB之间适当的缓冲区设置:socket.setsockopt(zmq.SNDHWM, 1000) # 发送缓冲区大小 socket.setsockopt(zmq.RCVHWM, 1000) # 接收缓冲区大小使用多线程提升性能:from threading import Thread def worker(): context = zmq.Context() socket = context.socket(zmq.REP) socket.connect("inproc://workers") # 处理逻辑... threads = [Thread(target=worker) for _ in range(3)] for thread in threads: thread.start()ZeroMQ就像是给程序装上了"微信":简单:几行代码搞定通信灵活:多种通信模式随意选可靠:自动重连、消息队列高效:性能甩开传统Socket几条街掌握了ZeroMQ,分布式系统不再是噩梦!
2025年01月14日
100 阅读
0 评论
0 点赞
2025-01-02
dify和ollama使用教程
1. 安装docker这一步百度2. 安装difygit clone https://github.com/langgenius/dify.git cd dify cd docker cp .env.example .env docker-compose up -denv里面可以修改映射的端口,默认是80和443,教程先默认{callout color="#f0ad4e"}EXPOSE_NGINX_PORT=4080EXPOSE_NGINX_SSL_PORT=4443{/callout}2.1 之后访问 localhost/install 进行安装3. 安装Ollama然后我们需要去安装Ollama,官网地址https://ollama.com/安装完ollama后去找适合的模型下载https://ollama.com/search下列我举例一下网友比较推荐的模型{callout color="#e1e1db"}yi Yi 1.5 是一个高性能的双语语言模型。 参数大小:6b9b34b 更新时间:7个月前 适合编程的双语(中文和英文)模型。yi-coder Yi-Coder 是一系列开源代码语言模型,提供少于100亿参数的最先进的编码性能。 参数大小:1.5b9b 更新时间:3个月前 适合编程的双语模型。qwen Qwen 1.5 是由阿里云提供的一系列大型语言模型,参数从0.5B到110B不等。 参数大小:0.5b1.8b4b7b14b32b72b110b 更新时间:8个月前 阿里云提供的模型,可能包含对中文的支持。 qwen2 Qwen2 是阿里集团提供的一系列大型语言模型。 参数大小:tools0.5b1.5b7b72b 更新时间:3个月前 同样可能包含对中文的支持。llama2-chinese Llama 2 基于模型,针对提高中文对话能力进行了微调。 参数大小:7b13b 更新时间:14个月前 专门针对中文对话进行了优化的模型。{/callout}这里的几b是代表着多少亿的参数,个人笔记本建议选择10b以内,不然参数太多了可能会很慢。这里我以yi-coder为例子终端运行ollama run yi-coderollama run yi-coder pulling manifestpulling 8169bd33ad13... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 5.0 GB pulling afc128547699... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 527 B pulling 43070e2d4e53... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 11 KB pulling 3dc12ee097e8... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 135 B pulling a60ed831ae4c... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 485 B verifying sha256 digest writing manifest success >>> 你好Hi, how can I assist you? Please provide more specific information about your request.4.然后dify里面配置模型这里URL填写http://host.docker.internal:11434(因为dify是安装在docker里面的,但是ollama是安装在本机的,所以需要让docker访问ollama的api)点击保存,右上角会提示修改成功4.1 回到首页创建空白模板右上角选择yi-code,然后给他提示词就可以了然后上方点击知识库进行知识库配置可以上传自己需要的内容处理的时候可以这样选择添加完成之后回到聊天机器人4.2 给机器人添加知识库左边的提示词下面哟一个上下文,可以添加知识库,之后就可以正常使用了5. 但是上面的yi-coder不好用所以我用了另外的,ollama run llama3.1:8b这个相比于其他会好用很多。5.1 TEXT EMBEDDING 配置知识库那里的添加,我们也可以选择高质量只是需要配置一个TEXT EMBEDDING添加和上面的那个差不多只是需要选择TEXT EMBEDDING5.2 Ollama配置TEXT EMBEDDINGdmeta-embedding-zhollama pull shaw/dmeta-embedding-zh测试:curl http://localhost:11434/api/embeddings -d '{ "model": "shaw/dmeta-embedding-zh", "prompt": "天空是灰色的" }'返回的内容这样就成功了dify里面正常添加这个就行
2025年01月02日
27 阅读
0 评论
0 点赞
1
2
...
8