当前位置: 首页 > wzjs >正文

建设旅游网站的工作方案sem seo

建设旅游网站的工作方案,sem seo,西部数码注册域名,登录邮箱wordpress说明 今天偶然在别的文章里看到这个功能,突然觉得正好。 CeleryWorker已经搭好了,但是我一直想在用户请求时进行额外的处理会比较影响处理时间,用这个正好可以搭配上。 我设想的一个场景: 1 用户发起请求2 接口中进行关键信息…

说明

今天偶然在别的文章里看到这个功能,突然觉得正好。

CeleryWorker已经搭好了,但是我一直想在用户请求时进行额外的处理会比较影响处理时间,用这个正好可以搭配上。
在这里插入图片描述
在这里插入图片描述
我设想的一个场景:

  • 1 用户发起请求
  • 2 接口中进行关键信息的日志记录 logger.info这种,直接记录在文本文件里
  • 3 影响请求后在后台进行相关操作:在redis中计数,将数据转发kafka等

这样既不会影响请求时间,又可以把需要做的操作,例如在内存中记录,修改状态;采样数据发送做完。

一个比较笨(现在有在用)的方法是在处理时将数据采样发送到kafka,然后担心kafka服务出问题,又做了try…except。当然,最坏的情况也还好,因为调用大模型通常都是数秒。

当然,在接口中logging和redis这样的操作倒是没关系,因为时间足够短。某种程度上来说,logging+ logstash可能是更好的方案,redis都还有可能挂。

还有一个相对好一点的方法(准备好了还没有启用)。使用WCelery发送任务(甚至可以是复杂任务),并且可以再封装一层异步(async httpx),这样也只是多花一个请求时间。

当然这些都不如直接用FastAPI自带的BackgroundTasks方法,这种服务启动嵌入的方法应该更可靠。(其实在flask时代,就有before和after request装饰器)

以下是一个实验代码(主要 by deepseek)

server.py

from fastapi import FastAPI, BackgroundTasks, HTTPException
import time
from typing import Optional
import loggingapp = FastAPI()# 配置日志
logging.basicConfig(filename='app.log', level=logging.INFO)# def write_log(message: str):
#     """记录日志到文件(模拟耗时操作)"""
#     time.sleep(2)  # 模拟耗时操作
#     with open("log.txt", mode="a") as f:
#         f.write(f"{time.ctime()}: {message}\n")
#     logging.info(f"日志已记录: {message}")import aiofiles  # 需要先安装: pip3 install aiofiles
import asyncioasync def write_log(message: str):"""真正的异步日志写入"""await asyncio.sleep(2)  # 正确使用awaitasync with aiofiles.open("log.txt", mode="a") as f:await f.write(f"{time.ctime()}: {message}\n")logging.info(f"日志已记录: {message}")  # logging默认是同步的
def send_email(to: str, subject: str, body: Optional[str] = None):"""模拟发送邮件(带错误处理)"""try:time.sleep(3)  # 模拟网络延迟with open("email_logs.txt", "a") as f:content = f"""Time: {time.ctime()}To: {to}Subject: {subject}Body: {body or 'No content'}{'-'*30}"""f.write(content)print(f"邮件已发送给 {to}")except Exception as e:logging.error(f"邮件发送失败: {str(e)}")def cleanup_temp_files():# aa"""模拟清理临时文件"""time.sleep(1)print("临时文件清理完成")from pydantic import BaseModelclass RegisterInput(BaseModel):username: stremail: str@app.post("/register")
async def register_user(user_input:RegisterInput , background_tasks: BackgroundTasks):"""用户注册接口(演示多个后台任务)"""if not user_input.email.endswith("@example.com"):raise HTTPException(400, "仅支持 example.com 域名")# 添加多个后台任务background_tasks.add_task(write_log,f"新用户注册: {user_input.username}, 邮箱: {user_input.email}")background_tasks.add_task(send_email,to=user_input.email,subject="欢迎注册",body=f"尊敬的 {user_input.username},感谢您的注册!")background_tasks.add_task(cleanup_temp_files)return {"message": "注册成功","details": "激活邮件和日志记录正在后台处理"}@app.get("/stats")
async def get_stats(background_tasks: BackgroundTasks):"""获取统计信息(演示快速响应+后台处理)"""background_tasks.add_task(write_log,"用户查看了统计信息")# 立即返回的简单数据return {"active_users": 42,"note": "详细日志正在后台记录"}if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

test.py

resp = httpx.post('http://127.0.0.1:8000/register', json = {'username':'andy', 'email':'andy@example.com'})

对应产生的几个文件,如log.txt

Fri Apr 18 23:27:02 2025: 新用户注册: andy, 邮箱: andy@example.com
Fri Apr 18 23:28:08 2025: 新用户注册: andy, 邮箱: andy@example.com
Fri Apr 18 23:29:52 2025: 新用户注册: andy, 邮箱: andy@example.com
Fri Apr 18 23:30:33 2025: 新用户注册: andy, 邮箱: andy@example.com
Fri Apr 18 23:39:40 2025: 新用户注册: andy001, 邮箱: andy001@example.com

实验成功,感觉还挺好的。

原文有一些错误,说background_tasks只能执行同步任务,事实证明是错误的。某种程度上说,异步的才符合FastAPI的特点。

在这里插入图片描述
另外,如果有些同步操作时间特别短是可以不用异步的。例如redis操作。
在这里插入图片描述
以上对我有用,希望对你也有用。


文章转载自:

http://aS2icFmo.zfyym.cn
http://E4lQwBlI.zfyym.cn
http://eCdpW7xI.zfyym.cn
http://QPqqxugZ.zfyym.cn
http://ImQIZ6VH.zfyym.cn
http://xq5zvuNu.zfyym.cn
http://oqNm6YDT.zfyym.cn
http://ztUPfvZY.zfyym.cn
http://QN3eCQ1Y.zfyym.cn
http://yhwpV6S3.zfyym.cn
http://2HEfEvYj.zfyym.cn
http://eFhZ5BFT.zfyym.cn
http://PuTEygcD.zfyym.cn
http://mq5qJ5P0.zfyym.cn
http://SpnF3Is8.zfyym.cn
http://7JkXg6wT.zfyym.cn
http://rXHpv7Je.zfyym.cn
http://wGGYlI3W.zfyym.cn
http://8SAzhStA.zfyym.cn
http://0qRzRHWj.zfyym.cn
http://4yqWgxyd.zfyym.cn
http://pnkYXN71.zfyym.cn
http://pFoFZSaC.zfyym.cn
http://SAvsHB6q.zfyym.cn
http://bG0nqXWX.zfyym.cn
http://lMdeg6Jo.zfyym.cn
http://0Yum9Lc4.zfyym.cn
http://qTePiche.zfyym.cn
http://6osWBfGZ.zfyym.cn
http://CK3i0VSX.zfyym.cn
http://www.dtcms.com/wzjs/775070.html

相关文章:

  • 企业为什么要建立自己的网站做ic哪些网站好做
  • 禾天姿网站开发网站域名哪些后缀更好
  • 网站建设视频教程下载凡科快图一键抠图
  • 国内做网站建设知名的公司淘宝客网站哪个好
  • 被墙域名黑别人网站做网站需要什么配置
  • 商城网站方案wordpress .ds_store
  • 如何免费建立自己网站多商户海外商城源码下载
  • 手表购买网站登录wordpress的网址
  • 网站做视频网站wordpress中文插件seo百度
  • 域名备案掉了网站还可以用吗推广软件app
  • 厦门网站建设策划南通市网站建设
  • 网站系统设计方案怎么提高网站的收录量
  • 中国十大品牌网站哪家公司做网站不错
  • 公司起名网站十大排名博客发布 网站模版
  • 新网网站登录不上招标网站大全
  • 平凉建设局网站如何制作网站板块
  • 网站建设的基本条件首页图片点击率如何提高
  • 体育视频网站建设vi设计要做什么
  • 上海网站建设上海网站制作ps做网站页面先后顺序
  • 中国建设银行的网站php双语网站
  • 购物网站多少钱潍坊做网站的
  • 珠海网站设计公司2018企业网站优化应该怎么做
  • wordpress 小工具区南安seo
  • 企业做网站价格佛山市企业网站seo点击软件
  • 网站制作公司业务员天堂网在线观看
  • 制作网站river网站编辑工具软件
  • 网站设计原则有哪些重庆网站建设招标
  • 毕业答辩ppt 网站开发河北城乡建设网站
  • 完爆网站开发经典实例网站设计师培训班
  • iis怎么做网站怎么修改wordpress目录名字