虽然Redis连接测试通过,但在实际任务提交时仍然切换到Mock模式。经过诊断发现可能的原因:
scan_tasks.py导入了多个复杂模块增强错误诊断
Redis连接预检
优雅降级机制
要使用真实的Celery功能,需要启动Worker:
# 在新的终端窗口中运行
cd backend
activate_venv.bat # Windows
# 或 source activate_venv.sh # Unix/Linux
# 启动Celery Worker
celery -A app.celery_app worker --loglevel=info
# Windows用户可能需要使用
celery -A app.celery_app worker --loglevel=info --pool=solo
检查Redis状态
redis-cli ping
# 应该返回: PONG
检查Celery Worker
celery -A app.celery_app inspect active
# 应该显示活跃的Worker
测试任务提交
python test_celery_task.py
启动应用
python run.py
| 场景 | Celery模式 | Mock模式 | 说明 |
|---|---|---|---|
| Redis可用 + Worker运行 | ✅ | - | 最佳性能 |
| Redis可用 + 无Worker | ❌ → 🔄 | ✅ | 自动降级 |
| Redis不可用 | ❌ → 🔄 | ✅ | 自动降级 |
| 导入错误 | ❌ → 🔄 | ✅ | 自动降级 |
# 检查Redis服务
redis-cli ping
# 检查端口占用
netstat -an | grep 6379
# 重启Redis (Windows)
redis-server --service-stop
redis-server --service-start
# 检查Worker状态
celery -A app.celery_app inspect stats
# 重启Worker
# Ctrl+C 停止当前Worker,然后重新启动
celery -A app.celery_app worker --loglevel=info
# 测试模块导入
python -c "from app.tasks.scan_tasks import scan_aws_resources; print('OK')"
# 检查缺失依赖
python verify_setup.py
# 终端1: 启动Redis (如果未作为服务运行)
redis-server
# 终端2: 启动Celery Worker
celery -A app.celery_app worker --loglevel=info
# 终端3: 启动Flask应用
python run.py
# 使用进程管理器 (如supervisor)
# 配置Redis集群
# 配置多个Celery Worker
# 使用Gunicorn启动Flask
celery -A app.celery_app flower (需要安装flower)现在系统具有以下特性:
无论Redis和Celery是否可用,应用都能正常运行! 🚀