scheduler.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #!/usr/bin/env python3
  2. # 双任务独立调度器
  3. import time
  4. import schedule
  5. from datetime import datetime
  6. from loguru import logger
  7. from cookie_generator import CookieGenerator
  8. from config import TASKS_CONFIG
  9. class DualTaskScheduler:
  10. def __init__(self):
  11. self.manager = CookieGenerator()
  12. self.setup_logging()
  13. def setup_logging(self):
  14. """日志配置"""
  15. logger.add(
  16. "dual_task_scheduler.log",
  17. rotation="10 MB",
  18. level="INFO",
  19. format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"
  20. )
  21. def setup_individual_schedules(self):
  22. """为每个任务设置独立的调度"""
  23. logger.info("⏰ 设置独立任务调度...")
  24. for task_name, task_config in TASKS_CONFIG.items():
  25. if not task_config["enabled"]:
  26. logger.info(f"⏭️ 跳过未启用任务: {task_name}")
  27. continue
  28. interval = task_config["check_interval"]
  29. # 为每个任务设置独立的定时任务
  30. schedule.every(interval).minutes.do(
  31. self.run_single_task,
  32. task_name=task_name,
  33. task_config=task_config
  34. )
  35. logger.info(f"✅ 设置任务: {task_name}")
  36. logger.info(f" 📝 {task_config['description']}")
  37. logger.info(f" ⏰ 间隔: 每 {interval} 分钟")
  38. logger.info(f" 🎯 目标: {task_config['target_count']} 个")
  39. logger.info(f" 📦 批量: {task_config['batch_size']} 个/次")
  40. def run_single_task(self, task_name, task_config):
  41. """运行单个任务"""
  42. logger.info(f"🔍 开始检查任务: {task_name}")
  43. start_time = datetime.now()
  44. try:
  45. success_count, new_count = self.manager.genera_cookies(task_config)
  46. duration = (datetime.now() - start_time).total_seconds()
  47. target_count = task_config["target_count"]
  48. logger.info(f"✅ 任务完成: {task_name}")
  49. logger.info(f" 📊 结果: {success_count} 个生成成功")
  50. logger.info(f" 📦 当前: {new_count}/{target_count} 个")
  51. logger.info(f" ⏱️ 耗时: {duration:.1f} 秒")
  52. except Exception as e:
  53. logger.error(f"❌ 任务失败 {task_name}: {e}")
  54. def run_all_tasks_once(self):
  55. """立即执行所有任务一次"""
  56. logger.info("🚀 立即执行所有任务...")
  57. total_generated = 0
  58. start_time = datetime.now()
  59. for task_name, task_config in TASKS_CONFIG.items():
  60. if task_config["enabled"]:
  61. success_count, _ = self.manager.genera_cookies(task_config)
  62. total_generated += success_count
  63. duration = (datetime.now() - start_time).total_seconds()
  64. logger.info(f"🎊 所有任务完成! 共生成 {total_generated} 个Cookie, 耗时 {duration:.1f}秒")
  65. def run_single_task_once(self, task_name):
  66. """立即执行单个任务"""
  67. if task_name not in TASKS_CONFIG:
  68. logger.error(f"❌ 未知任务: {task_name}")
  69. return
  70. task_config = TASKS_CONFIG[task_name]
  71. if not task_config["enabled"]:
  72. logger.warning(f"⚠️ 任务未启用: {task_name}")
  73. logger.info(f"🚀 立即执行任务: {task_name}")
  74. self.run_single_task(task_name, task_config)
  75. def show_status(self):
  76. """显示所有任务状态"""
  77. status_report = f"""
  78. 任务现状:
  79. {'=' * 60}"""
  80. for task_name, task_config in TASKS_CONFIG.items():
  81. if task_config["enabled"]:
  82. cookie_key = task_config["cookie_key"]
  83. current_count = self.manager.get_cookie_manager(cookie_key).get_cookie_count()
  84. target_count = task_config["target_count"]
  85. interval = task_config["check_interval"]
  86. status_icon = "✅" if current_count >= target_count else "🔄"
  87. status_report += f"""
  88. 📋 {task_name} ({task_config['description']})
  89. {status_icon} COOKIE数量: {current_count}/{target_count}
  90. ⏰ 检查频率: 每 {interval} 分钟
  91. 📦 批量: {task_config['batch_size']} 个/次
  92. 🔑 存储: {cookie_key}"""
  93. status_report += f"\n{'=' * 60}"
  94. logger.info(status_report)
  95. def run(self):
  96. """运行调度器"""
  97. # 环境检查
  98. if not self.manager.check_environment():
  99. logger.error("❌ 环境检查失败,系统退出")
  100. return
  101. # 显示初始状态
  102. self.show_status()
  103. # 设置独立调度
  104. self.setup_individual_schedules()
  105. logger.info("🔄 系统运行中...")
  106. # 立即执行一次所有任务
  107. self.run_all_tasks_once()
  108. try:
  109. while True:
  110. schedule.run_pending()
  111. time.sleep(60) # 每分钟检查一次
  112. except KeyboardInterrupt:
  113. logger.info("⏹️ 系统停止")