zbparse/flask_app/start_up.py

68 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# flask_app/start_up.py
import logging
from flask import Flask, request, g
from flask_app.ConnectionLimiter import ConnectionLimiter
from flask_app.logger_setup import CSTFormatter, create_logger
from flask_app.routes.get_deviation import get_deviation_bp
from flask_app.routes.little_zbparse import little_zbparse_bp
from flask_app.routes.upload import upload_bp
from flask_app.routes.test_zbparse import test_zbparse_bp
class FlaskAppWithLimiter(Flask):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 初始化一个字典来存储每个蓝图的限流器
self.connection_limiters = {}
def create_app():
app = FlaskAppWithLimiter(__name__)
# 设置日志的全局配置(如果需要)
handler = logging.StreamHandler()
handler.setFormatter(CSTFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO)
@app.before_request
def before_request():
"""
每个请求开始前初始化 logger 和 output_folder
根据请求的端点选择不同的子文件夹。
"""
# 确定当前请求的端点
blueprint = request.blueprint
# 映射端点到子文件夹
subfolder_map = {
'get_deviation': 'output3',
'little_zbparse': 'output2',
'upload': 'output1',
'test_zbparse': 'test_output'
}
# 获取对应的子文件夹,默认为 'output1'
subfolder = subfolder_map.get(blueprint, 'output1')
# 创建 logger 和 output_folder
create_logger(app, subfolder)
# 注册蓝图
app.register_blueprint(get_deviation_bp)
app.register_blueprint(little_zbparse_bp)
app.register_blueprint(upload_bp)
app.register_blueprint(test_zbparse_bp)
app.connection_limiters['upload'] = ConnectionLimiter(max_connections=7)
app.connection_limiters['get_deviation'] = ConnectionLimiter(max_connections=7)
app.connection_limiters['default'] = ConnectionLimiter(max_connections=10)
@app.teardown_request
def teardown_request(exception):
limiter = getattr(g, 'limiter', None)
monitor = getattr(g, 'monitor', None)
if limiter and not monitor.is_timeout:
limiter.semaphore.release()
return app
#TODO:培训要求、总体要求、进度要求、'建设要求'到技术要求中,归类到其他要求中
if __name__ == '__main__':
app = create_app()
app.run(debug=True, host='0.0.0.0', port=5000)