首页
关于
友链
Search
1
ESXI 一些功能调整
442 阅读
2
SoftEther 客户端篇
423 阅读
3
天翼云网关3.0/4.0超管密码
414 阅读
4
SoftEther 服务端篇
308 阅读
5
远程桌面rustdesk使用说明
254 阅读
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
登录
Search
标签搜索
python
esxi
git
SoftEther
linux
apscheduler
在线
rclone
Ubuntu
list
列表
idm
激活码
Charles
pdf
免安装
鲁大师
图片查看器
蜂蜜浏览器
honeyview
哥特式
累计撰写
98
篇文章
累计收到
16
条评论
首页
栏目
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
页面
关于
友链
搜索到
98
篇与
的结果
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日
6 阅读
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日
26 阅读
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日
14 阅读
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日
28 阅读
1 评论
0 点赞
2025-01-22
Sublime Text 4192激活【官方安装包】,Windows+MacOS
Sublime 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日
74 阅读
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日
56 阅读
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日
16 阅读
0 评论
0 点赞
2024-12-05
FileCodeBox配置
docker运行name: filecodebox services: filecodebox: restart: always ports: - 123:12345 #左边的8080可以随意更改成服务器上没有用过的端口 volumes: - ./data:/app/data container_name: filecodebox image: lanol/filecodebox:beta networks: default: external: true name: web s3配置文件
2024年12月05日
17 阅读
0 评论
0 点赞
2024-11-29
阿里云CDN使用
1. 阿里云配置一个cdn,一切默认就行新建一个cdn,域名就是,泛域名类型的.cdn.example.com源站,因为家里的80和443是没了的,所以使用的是65000,例如:test.example.com:650001.1 基本设置-->ipv6开关可以根据自己的需求设置是否打开1.2 回源配置-->IPv6回源优先使用IPv6-->已开启回源跟随-->未开启回源IPv4/IPv6轮询-->已开启1.3 性能优化-->忽略参数这里需要修改一下,要不然某些参数会被忽略忽略参数-->否2. 新建一个网站默认就行,监听的端口是65000,不是默认的80,配置一个反向代理反代到frps的端口号,比如650803. 对应的服务器上配置frp3.1 frps的配置bindAddr = "0.0.0.0" # 服务端监听端口 bindPort = 52101 # 服务端监听 KCP 协议端口,用于接收配置了使用 KCP 协议的 frpc 连接。 kcpBindPort = 52101 # 在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。 auth.token = "token.example" # http端口,不要设置80,否则和宝塔面板的端口号冲突 vhostHTTPPort = 65080 # https端口,不要设置443 vhostHTTPSPort = 65443 # 二级域名后缀 subDomainHost = "cdn.example.com" # 开启frps仪表盘可以检查frp的状态和代理的统计信息。 webServer.addr = "0.0.0.0" webServer.port = 65002 webServer.user = "example" webServer.password = "example" enablePrometheus = true # 日志配置文件 # 日志文件,不指定日志信息默认输出到控制台 log.to = "./logs/cdn-example.log" # 日志等级,可用等级“trace,debug,info,warn,error” log.level = "info" # 日志保存最大时间 log.maxDays = 3 log.disablePrintColor = false # 自定义默认的404页面 custom404Page = "./frp/404.html"3.2 frpc的配置# 用户名,设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突。 user = "daimaji" serverAddr = "127.0.0.1" serverPort = 52101 # 登录失败就退出 loginFailExit = true # 控制台日志文件 log.to = "./cdn-example.log" # trace, debug, info, warn, error log.level = "info" log.maxDays = 3 # 当log.to是控制台时禁用日志颜色,默认值为false log.disablePrintColor = false # 认证方式 auth.method = "token" # 令牌 auth.token = "token.example" # 控制面板设置 webServer.addr = "0.0.0.0" webServer.port = 65002 webServer.user = "example" webServer.password = "example" # 将提前建立连接,默认值为零 transport.poolCount = 5 #用于连接到服务器的通信协议 #现在支持tcp、kcp、quic、websocket和wss,默认为tcp transport.protocol = "tcp" #连接服务器时设置客户端绑定ip,默认为空。 #只有当protocol=tcp或websocket时,才会使用该值。 transport.connectServerLocalIP = "0.0.0.0" [[proxies]] name = "测试" type = "http" localIP = "127.0.0.1" localPort = 65003 subdomain = "test"4. 访问测试
2024年11月29日
22 阅读
0 评论
0 点赞
2024-11-28
Idea安装codeium排坑(faild download language server)
1. 插件市场搜索安装codeium2. 重启后右下角有这个图标3. 重启IDEA之后,提示faild download language server4. 前往 github.com 下载对应版本的exe程序,版本与插件版本对应,比如上图中我插件的版本是 1.28.1 我就下载1.28.1的exe。5. 把下载好的 language_server_windows_x64.exe 放到插件目录下的一个很长字符串的目录下。这里有一个小技巧,如果你的插件目录不在这里,你可以用Everything软件全盘搜codeium 。最后一串英文,每个人的可能不一样C:\Users\用户名\AppData\Roaming\JetBrains\PyCharm2024.3\plugins\codeium\f740e5605570f4cf2ef1fdda47389168e7319c796. 重启IDEA后提示登录,登录之后便可使用
2024年11月28日
175 阅读
0 评论
0 点赞
2024-11-12
远程桌面rustdesk使用说明
项目地址:https://github.com/rustdesk/rustdesk/1. 公网服务器上跑docker项目docker-compose.yml文件:networks: rustdesk-net: external: false services: hbbs: container_name: hbbs ports: - 21115:21115 - 21116:21116 - 21116:21116/udp - 21118:21118 image: rustdesk/rustdesk-server:latest command: hbbs -r 你的域名:21117 -k {key值,自己设定} volumes: - ./data:/root networks: - rustdesk-net depends_on: - hbbr restart: unless-stopped hbbr: container_name: hbbr ports: - 21117:21117 - 21119:21119 image: rustdesk/rustdesk-server:latest command: hbbr volumes: - ./data:/root networks: - rustdesk-net restart: unless-stopped默认配置就行2. 配置客户端2.1 直接配置客户端电脑上:手机上:2.2. GitHub配置,自动编译版本{callout color="#80b8f5"}访问rustdesk的项目地址。点击Fork创建分支。(就是把别人的项目拉一份到你的项目库中){/callout}{callout color="#80b8f5"}默认配置就行{/callout}{callout color="#80b8f5"}配置环境变量{/callout}这里,分别创建两个变量RENDEZVOUS_SERVER 服务器IP或域名RS_PUB_KEY key值{callout color="#80b8f5"}点击Actions-General 勾选Allow all actions and reusable workflows后保存。{/callout}在没有变动情况下,默认都是勾选的。{callout color="#80b8f5"}接下来,选择Actions启用工作流。{/callout}刷新页面,便可以看到当前的任务。{callout color="#f0ad4e"}这里的任务需要很久,大概40-50分钟左右{/callout}创建完成后,在Releases中便可以看到对应的包了。{callout color="#80b8f5"}使用{/callout}这里以Windows为例。运行后在网络配置中,无需填写相关服务器信息。在无P2P直连环境,便可以直连了。删除下面代码 位置\rustdesk-master\src\ui\index.tis完成后,重新打包。界面就好看多了
2024年11月12日
254 阅读
1 评论
0 点赞
2024-11-12
pycharm激活说明
2025年3月27日,评论区提到了另外的方法,在语言和区域设置中,把区域改为未指定就好了{dotted startColor="#ff6c6c" endColor="#1989fa"/}现在的激活会验证网址,暂时只想到代理的方式解决设置-->外观与行为-->系统设置-->HTTPdaili选择手动代理-->HTTP主机号:随便一个不存在的都行,127.0.0.1端口号:81(不存在就行)-不为以下项使用代理:downloads.marketplace.jetbrains.com, resources.jetbrains.com, hub.jetbrains.com, plugins.jetbrains.com, *.github.com, *.google.com, *.bing.com, registry.geoway.com, 172.16.*, 10.*, localhost, api.cognitive.microsofttranslator.com, *.microsoft.com
2024年11月12日
88 阅读
3 评论
0 点赞
2024-11-07
misskey的一些使用教程
1. 其他应用使用misskey登录原文api使用地址 要为使用应用程序的用户(以下简称“用户”)获取访问令牌,请按照以下步骤请求颁发。提示下面描述的方法称为 MiAuth,它无需创建应用程序即可立即颁发访问令牌。步骤 1生成 UUID。从现在开始,这将被称为会话 ID。 警告 请每次生成此会话ID,并且不要重复使用。 第 2 步在用户的浏览器中显示应用程序身份验证表单。可以使用以下格式的 URL 打开身份验证表单:https://{host}/miauth/{session}{host}替换为您服务器的主机。主机通常由用户输入。{session}替换为您的会话 ID。您还可以在 URL 中设置一些选项作为查询参数:姓名解释name应用程序名称。icon应用程序图标图像 URL。callback身份验证后重定向到的 URL。 重定向时,session会话 ID 将作为查询参数添加。permission应用程序请求的权限。列出 所请求的权限,以 分隔。您可以在此处,检查权限列表。[](https://misskey-hub.net/cn/docs/for-developers/api/permission/)例子https://misskey.example/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f?name=MyApp&callback=https%3A%2F%2Fmyapp.example.com%2Fcallback&permission=write:notes,write:following,read:drive通过之后,携带的参数就是https://myapp.example.com/callback?session=c1f6d42b-468b-4fd2-8274-e58abdedef6f步骤3用户授予应用程序访问权限后,对以下格式的 URL 的 POST 请求将返回包含访问令牌的 JSON 响应。https://{host}/api/miauth/{session}/check{host} 替换为您服务器的主机。{session} 替换为您的会话 ID。响应中包含的属性有:姓名解释token用户的访问令牌。user用户信息。
2024年11月07日
94 阅读
0 评论
0 点赞
2024-07-31
acme更新ssl证书
acme实用技巧:稳妥的自动更新证书之宝塔面板_acme证书-CSDN博客acme实用技巧:稳妥的自动更新证书之宝塔面板1. 安装 acme.sh安装很简单, 一个命令:curl https://get.acme.sh | sh -s email=my@example.com把 my@example.com 改成自己的邮箱安装成功后,会为你自动创建定时任务, 如果快过期了, 需要更新, 则会自动更新证书。默认情况下,证书将每60天更新一次。切换默认证书目前 acme.sh 支持 Let’s Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用下面命令:#切换 Let's Encrypt acme.sh --set-default-ca --server letsencrypt #切换 Buypass acme.sh --set-default-ca --server buypass #切换 ZeroSSL acme.sh --set-default-ca --server zerossl #切换 SSL.com acme.sh --set-default-ca --server ssl.com #切换 Google Public CA acme.sh --set-default-ca --server google2. 设置DNS验证文档:https://github.com/acmesh-official/acme.sh/wiki/dnsapi以 CloudFlare为例:使用全局API密钥准备:全局API密钥在 我的个人资料–API令牌–Global API Key 获得设置CloudFlare DNS自动验证使用下面命令:export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4" #API密钥 export CF_Email="123456@qq.com" #登录邮箱3. 生成证书如果之前安装过证书,后面加 --force 参数,acme.sh --issue --dns dns_cf -d xxx.com -d *.xxx.com成功之后,会在 ~/.acme.sh/目录生成以域名为名称的文件夹,里面包含了证书和各种信息不要通配符,可以去掉:-d *.xxx.com ,如果有多个子域名,后面加 -d x.xxx.com--dns dns_cf 表示使用CloudFlare DNS 自动验证4. 安装证书(重点)假设:你网站使用的是nginx,使用以下命令acme.sh --install-cert -d xxx.com -d *.xxx.com \ --key-file /www/server/panel/vhost/cert/xxx.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/xxx.com/fullchain.pem \ --reloadcmd "service nginx force-reload"使用这条命令时先要生成证书(第三步)不要通配符,可以去掉:-d *.xxx.com ,如果有多个子域名,后面加 -d x.xxx.com命令解读--install-cert #安装证书--key-file #指定安装证书密钥路径--fullchain-file #指定安装证书路径--reloadcmd #重新加载nginx生效为什么要使用那么多参数因为acme证书虽然60天更新一次,但是更新的证书路径是:~/.acme.sh/xxx.com你的域名指向的证书路径并不是在 ~/.acme.sh/不能使用~/.acme.sh/文件夹中的证书文件,它们仅供内部使用,文件夹结构将来可能会更改这些参数会被acme保存起来,下次自动更新时就会自动把证书安装到指定的路径,然后帮你重新加载nginx生效宝塔面板安装证书你要先知道你的域名证书指向的路径在哪,以宝塔面板为例:/www/server/panel/vhost/cert/xxx.com/fullchain.pem /www/server/panel/vhost/cert/xxx.com/privkey.pem可以看到宝塔的证书路径是:/www/server/panel/vhost/cert/如果还没有安装过证书,那么此路径是没有域名证书文件夹的,宝塔面板默认的证书路径格式是:/www/server/panel/vhost/cert/{域名}所以,生成证书后,到~/.acme.sh/目录下找到域名文件夹,复制证书fullchain.cer #证书 xx.com.key #密钥复制到配置ssl证书的地方, 再查看证书路径:最后再执行以下命令,记得修改为你的证书路径acme.sh --install-cert -d xxx.com -d *.xxx.com \ --key-file /www/server/panel/vhost/cert/xxx.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/xxx.com/fullchain.pem \ --reloadcmd "service nginx force-reload"不是复制了证书生效了吗,为什么还要执行上面的命令?因为这些参数会被保存起来,之后的自动更新才有效!5. 签发ECC证书使用以下命令 (以nginx为例)acme.sh --install-cert -d xxx.com -d *.xxx.com --keylength ec-256 \ --key-file /www/server/panel/vhost/cert/xxx.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/xxx.com/fullchain.pem \ --reloadcmd "service nginx force-reload"多了 --keylength ec-256 参数6.强制更新证书所有证书将每60天自动更新一次,但你要强制更新的话acme.sh --renew -d xxx.com --force或者,对于ECC证书:acme.sh --renew -d xxx.com --force --ecc如何停止证书续订要停止证书的续订,您可以执行以下操作以从续订列表中删除证书:acme.sh --remove -d xxx.com [--ecc]不会从磁盘中删除证书/密钥文件。您可以自己删除相应的目录 (例如 ~/.acme.sh/xxx.com )。如何升级 acme.sh您可以将acme.sh更新为最新代码:acme.sh --upgrade您还可以启用自动升级:acme.sh --upgrade --auto-upgrade然后acme.sh将自动保持最新。禁用自动升级:acme.sh --upgrade --auto-upgrade 0
2024年07月31日
51 阅读
1 评论
1 点赞
2024-07-03
实现 MySQL8 查询 JSON 字段
步骤 1: 创建表首先,我们需要创建一个包含 JSON 数据类型字段的表。假设我们要创建一个名为 users 的表,其中包含一个名为 info 的 JSON 字段。CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, info JSON );以上代码创建了一个名为 users 的表,其中包含 id 和 info 两个字段。id 字段是主键,info 字段是 JSON 类型。步骤 2: 插入数据接下来,我们需要向表中插入一些包含 JSON 数据的示例数据。INSERT INTO users (info) VALUES ('{"name": "John", "age": 30, "city": "New York"}'), ('{"name": "Alice", "age": 25, "city": "London"}'), ('{"name": "Bob", "age": 35, "city": "Paris"}');以上代码向 users 表中插入了三条数据,每条数据都包含一个 JSON 对象。步骤 3: 查询 JSON 字段现在,我们可以开始查询包含 JSON 字段的数据了。以下是一些常用的查询操作。查询 JSON 字段的所有数据要查询 JSON 字段的所有数据,可以使用简单的 SELECT 语句。SELECT * FROM users;以上代码将返回 users 表中所有数据。查询 JSON 字段的特定属性要查询 JSON 字段的特定属性,可以使用 -> 或 ->> 运算符。SELECT info->'$.name' AS name, info->'$.age' AS age FROM users;以上代码将返回 users 表中每行数据的 name 和 age 属性。查询 JSON 字段的条件要查询满足特定条件的 JSON 字段数据,可以使用 WHERE 子句。SELECT * FROM users WHERE info->'$.age' > 30;以上代码将返回 users 表中 age 大于 30 的数据。查询 JSON 数组中的值如果 JSON 字段是一个数组,可以使用 ->> 运算符和 JSON_TABLE 函数来查询数组中的值。SELECT jt.value FROM users, JSON_TABLE(info, '$.hobbies[*]' COLUMNS (value VARCHAR(255) PATH '$')) AS jt;
2024年07月03日
27 阅读
0 评论
0 点赞
1
2
...
7