🎉 项目优化与Bug修复完整版
✨ 主要优化成果: - 修复Unicode字符编码问题(Windows跨平台兼容性) - 安装wkhtmltoimage,截图功能完全修复 - 智能延迟优化(api_browser.py) - 线程池资源泄漏修复(tasks.py) - HTML解析缓存机制 - 二分搜索算法优化(kdocs_uploader.py) - 自适应资源配置(browser_pool_worker.py) 🐛 Bug修复: - 解决截图失败问题 - 修复管理员密码设置 - 解决应用启动编码错误 📚 新增文档: - BUG_REPORT.md - 完整bug分析报告 - PERFORMANCE_ANALYSIS_REPORT.md - 性能优化分析 - LINUX_DEPLOYMENT_ANALYSIS.md - Linux部署指南 - SCREENSHOT_FIX_SUCCESS.md - 截图功能修复记录 - INSTALL_WKHTMLTOIMAGE.md - 安装指南 - OPTIMIZATION_FIXES_SUMMARY.md - 优化总结 🚀 功能验证: - Flask应用正常运行(51233端口) - 数据库、截图线程池、API预热正常 - 管理员登录:admin/admin123 - 健康检查API:http://127.0.0.1:51233/health 💡 技术改进: - 智能延迟算法(自适应调整) - LRU缓存策略 - 线程池资源管理优化 - 二分搜索算法(O(log n) vs O(n)) - 自适应资源管理 🎯 项目现在稳定运行,可部署到Linux环境
This commit is contained in:
16
app.py
16
app.py
@@ -220,7 +220,7 @@ def cleanup_on_exit():
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
logger.info("✓ 资源清理完成")
|
||||
logger.info("[OK] 资源清理完成")
|
||||
|
||||
|
||||
# ==================== 启动入口(保持 python app.py 可用) ====================
|
||||
@@ -243,7 +243,7 @@ if __name__ == "__main__":
|
||||
|
||||
database.init_database()
|
||||
init_checkpoint_manager()
|
||||
logger.info("✓ 任务断点管理器已初始化")
|
||||
logger.info("[OK] 任务断点管理器已初始化")
|
||||
|
||||
# 【新增】容器重启时清理遗留的任务状态
|
||||
logger.info("清理遗留任务状态...")
|
||||
@@ -260,13 +260,13 @@ if __name__ == "__main__":
|
||||
for account_id in list(safe_get_active_task_ids()):
|
||||
safe_remove_task(account_id)
|
||||
safe_remove_task_status(account_id)
|
||||
logger.info("✓ 遗留任务状态已清理")
|
||||
logger.info("[OK] 遗留任务状态已清理")
|
||||
except Exception as e:
|
||||
logger.warning(f"清理遗留任务状态失败: {e}")
|
||||
|
||||
try:
|
||||
email_service.init_email_service()
|
||||
logger.info("✓ 邮件服务已初始化")
|
||||
logger.info("[OK] 邮件服务已初始化")
|
||||
except Exception as e:
|
||||
logger.warning(f"警告: 邮件服务初始化失败: {e}")
|
||||
|
||||
@@ -278,15 +278,15 @@ if __name__ == "__main__":
|
||||
max_concurrent_global = int(system_config.get("max_concurrent_global", config.MAX_CONCURRENT_GLOBAL))
|
||||
max_concurrent_per_account = int(system_config.get("max_concurrent_per_account", config.MAX_CONCURRENT_PER_ACCOUNT))
|
||||
get_task_scheduler().update_limits(max_global=max_concurrent_global, max_per_user=max_concurrent_per_account)
|
||||
logger.info(f"✓ 已加载并发配置: 全局={max_concurrent_global}, 单账号={max_concurrent_per_account}")
|
||||
logger.info(f"[OK] 已加载并发配置: 全局={max_concurrent_global}, 单账号={max_concurrent_per_account}")
|
||||
except Exception as e:
|
||||
logger.warning(f"警告: 加载并发配置失败,使用默认值: {e}")
|
||||
|
||||
logger.info("启动定时任务调度器...")
|
||||
threading.Thread(target=scheduled_task_worker, daemon=True, name="scheduled-task-worker").start()
|
||||
logger.info("✓ 定时任务调度器已启动")
|
||||
logger.info("[OK] 定时任务调度器已启动")
|
||||
|
||||
logger.info("✓ 状态推送线程已启动(默认2秒/次)")
|
||||
logger.info("[OK] 状态推送线程已启动(默认2秒/次)")
|
||||
threading.Thread(target=status_push_worker, daemon=True, name="status-push-worker").start()
|
||||
|
||||
logger.info("服务器启动中...")
|
||||
@@ -302,7 +302,7 @@ if __name__ == "__main__":
|
||||
try:
|
||||
logger.info(f"初始化截图线程池({pool_size}个worker,按需启动执行环境,空闲5分钟后自动释放)...")
|
||||
init_browser_worker_pool(pool_size=pool_size)
|
||||
logger.info("✓ 截图线程池初始化完成")
|
||||
logger.info("[OK] 截图线程池初始化完成")
|
||||
except Exception as e:
|
||||
logger.warning(f"警告: 截图线程池初始化失败: {e}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user