Squashed 'paste-framework/' content from commit 34e8684

git-subtree-dir: paste-framework
git-subtree-split: 34e8684c4bc3cebbe177509f42ab4ef5b5425a7a
This commit is contained in:
zwf
2026-06-02 19:09:22 +08:00
commit 4729698049
107 changed files with 21484 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
{
"app_name": "Background Task Demo",
"logger_desc": "用于日志输出的配置,各服务可以有自己的配置,但要使用独立配置时,必须编写额外代码",
"logger": {
"default": {
"desc": "默认日志配置,该配置小节的名称已经配置在 PASTE 框架中",
"basic": {
"filename": "logs/root.log",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
"level": 20
},
"filename": "logs/default.log",
"name": "Demo",
"max_bytes": 20971520,
"backup_count": 40
}
},
"tornado_desc": "用于 Tornado 服务的配置,每一项后面允许设置多个服务",
"tornado": {
"demo": {
"autoreload": false,
"handlers_pkg": "examples.02_background_task",
"port": 9000,
"static_path": "static",
"template_path": "templates",
"swagger_title": "DemoAPI",
"swagger_description": "Demo API",
"swagger_api_version": "1.0.1",
"swagger_contact": "email@qq.com"
}
},
"version": "1.0.1"
}
+34
View File
@@ -0,0 +1,34 @@
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!")
+20
View File
@@ -0,0 +1,20 @@
from tornado.ioloop import IOLoop
from paste.core import config
from paste.core.logging import set_logger_config
from paste.web.application import Application
if __name__ == "__main__":
# 日志配置
logger_config_name = 'logger.default'
set_logger_config(logger_config_name)
# 应用配置
demo_config: dict = config.get_config('tornado.demo', {})
port = config.get_config('tornado.demo.port', 9000)
# 创建应用
app = Application(**demo_config)
app.listen(port)
handlers_pkg = config.get_config('tornado.demo.handlers_pkg')
print(f"App {handlers_pkg} is running at http://localhost:{port}")
# 启动监听
IOLoop.current().start()