第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