34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
import asyncio
|
|
import logging
|
|
|
|
from paste.core import aio_pool
|
|
from paste.core.logging import echo_log
|
|
from paste.web.decorators import route
|
|
from paste.web.handler import RequestHandler
|
|
|
|
|
|
@route("/background")
|
|
class HelloHandler(RequestHandler):
|
|
"""
|
|
演示一个请求,其中包含异步后台任务。
|
|
"""
|
|
|
|
async def background_task(self):
|
|
"""
|
|
模拟后台异步处理任务:仅做延时,代表执行数据库写入、消息推送、文件处理等。
|
|
"""
|
|
try:
|
|
for i in range(10):
|
|
echo_log(f"后台任务开始执行-{i}...")
|
|
await asyncio.sleep(0.8) # 模拟耗时操作
|
|
echo_log("后台任务完成:模拟处理完毕。")
|
|
except Exception as e:
|
|
echo_log(f"后台任务异常: {e}", level=logging.ERROR)
|
|
|
|
async def get(self):
|
|
"""
|
|
常规请求,先执行后台任务,再响应前端,但是不等待任务完成。
|
|
"""
|
|
echo_log(f"Received request!")
|
|
await aio_pool.run_background_task(self.background_task())
|
|
self.response_ok(message="Response from paste!") |