2025.10.17故事生成系统(系统优化与部署)

第7天:系统优化与部署

📋 第7天概述

进行系统性能优化,完善错误处理机制,并完成项目部署准备。

🎯 第7天目标

主要任务:系统优化、错误处理完善、部署配置
核心需求:性能提升、稳定性增强、部署就绪

🔧 核心优化代码

1. 异步任务处理优化

import asyncio
from concurrent.futures import ThreadPoolExecutor

class AsyncTaskManager:
    def __init__(self, max_workers=3):
        self.executor = ThreadPoolExecutor(max_workers=max_workers)
    
    async def generate_story_async(self, prompt):
        """异步故事生成"""
        loop = asyncio.get_event_loop()
        return await loop.run_in_executor(
            self.executor, 
            self._sync_generate_story, prompt
        )
    
    def _sync_generate_story(self, prompt):
        """同步故事生成方法"""
        return story_service.generate_story(prompt)

2. 缓存机制实现

import time
from functools import wraps

class CacheManager:
    def __init__(self, ttl=3600):  # 1小时缓存
        self.cache = {}
        self.ttl = ttl
    
    def cached(self, func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            key = f"{func.__name__}:{str(args)}:{str(kwargs)}"
            
            if key in self.cache:
                cached_time, result = self.cache[key]
                if time.time() - cached_time < self.ttl:
                    return result
            
            result = func(*args, **kwargs)
            self.cache[key] = (time.time(), result)
            return result
        return wrapper

# 使用缓存装饰器
@CacheManager().cached
def get_cached_story(prompt):
    """带缓存的获取故事"""
    return story_service.generate_story(prompt)

3. 错误处理增强

import logging
from flask import jsonify

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def handle_api_errors(func):
    """API错误处理装饰器"""
    @wraps(func)
    def wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            logger.error(f"API Error: {str(e)}")
            return jsonify({
                "success": False,
                "error": "服务暂时不可用,请稍后重试"
            }), 500
    return wrapper

# 应用错误处理
@handle_api_errors
def generate_story_endpoint():
    data = request.get_json()
    return story_service.generate_story(data['prompt'])

4. 部署配置文件

# docker-compose.yml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      - FLASK_ENV=production
      - DATABASE_URL=sqlite:///children_story.db
    volumes:
      - ./uploads:/app/uploads

# requirements-prod.txt
Flask==2.3.3
gunicorn==21.2.0
requests==2.31.0
python-dotenv==1.0.0

5. 启动脚本

#!/bin/bash
# start.sh

echo "🚀 启动儿童故事平台..."

# 检查环境变量
if [ ! -f ".env" ]; then
    echo "❌ 缺少.env配置文件"
    exit 1
fi

# 安装依赖
pip install -r requirements-prod.txt

# 启动服务
gunicorn -w 4 -b 0.0.0.0:5000 app:app

echo "✅ 服务启动成功!访问 http://localhost:5000"

📊 第7天成果

✅ 异步任务处理优化
✅ 缓存机制实现
✅ 错误处理增强
✅ 部署配置文件准备
✅ 启动脚本编写

预计耗时:4-6小时
关键文件:src/utils/async_manager.py, src/utils/cache.py, docker-compose.yml, start.sh

posted @ 2025-12-28 23:15  ysd666  阅读(4)  评论(0)    收藏  举报