Sanic框架的新功能太好用了

2024年7月2日 14:35 by wst

异步处理

好久不用sanic了,今天看官方文档,竟然有一个这么好用的功能:异步任务处理。

具体代码如下,待会给出解释,运行方法:sanic back_task

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件        :back_task.py
@说明        :测试异步后台任务
@时间        :2024/07/02 11:01:29
@作者        :wanshitao
@版本        :1.0
'''
import asyncio
from sanic import Sanic
from sanic.response import text

app = Sanic("BackTask")

app.config.DB_NAME = 'appdb'

async def notify_server_started_after_five_second():
    "往当前事件循环中加入 后台任务 "
    await asyncio.sleep(5)
    print("Server successfully started!")

app.add_task(notify_server_started_after_five_second)


async def auto_inject(app):
    await asyncio.sleep(5)
    print(app.name, "with app. auto")

app.add_task(auto_inject)


async def explicit_inject(app):
    await asyncio.sleep(30)
    # 测试读取app中的内容
    print(app.name, "explicit show.", app.config.DB_NAME)

app.add_task(explicit_inject(app))

解释:

第一个异步任务是睡眠5s打印一句话;后面两个类似。

用途:

这样可以实现异步任务处理了。

比如用户上传了一个大文件,需要很长时间处理完,此时可以抛出一个响应,然后生成一个异步任务慢慢处理这个文件。

再比如用户打开了付款页面,不知道付款成功没有。此时可以生成一个异步任务,30分钟后检测用户的支付状态。

------------------------------------------

想想之前,这些功能都是怎么实现的:

1. 启动celery服务;

2. 抛出任务给celery;

3. 检查任务执行结果;

而现在一个框架里就可以实现了。喜大普奔!


Comments(0) Add Your Comment

Not Comment!