import schedule import time import logging from datetime import datetime from update_lottery import LotteryUpdater from app.services.prediction_service import PredictionService from app.core.database import SessionLocal # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', filename='lottery_scheduler.log' ) logger = logging.getLogger(__name__) class LotteryScheduler: def __init__(self): self.updater = LotteryUpdater() def update_lottery_data_job(self): """每天早上6点更新开奖数据任务""" try: logger.info("开始执行早上6点更新开奖数据任务...") # 更新双色球数据 logger.info("开始更新双色球数据...") ssq_result = self.updater.update_lottery_data('ssq') logger.info(f"双色球数据更新完成: {ssq_result}") # 更新大乐透数据 logger.info("开始更新大乐透数据...") dlt_result = self.updater.update_lottery_data('dlt') logger.info(f"大乐透数据更新完成: {dlt_result}") # 检查中奖情况 db = SessionLocal() try: logger.info("开始检查双色球中奖情况...") self.updater.check_and_update_bet_wins('ssq', db) logger.info("双色球中奖检查完成") logger.info("开始检查大乐透中奖情况...") self.updater.check_and_update_bet_wins('dlt', db) logger.info("大乐透中奖检查完成") finally: db.close() logger.info("早上6点更新开奖数据任务完成") except Exception as e: logger.error(f"早上6点更新开奖数据任务失败: {str(e)}") def generate_daily_recommendations_job(self): """每天下午5点生成拼盘推荐任务""" try: logger.info("开始执行下午5点生成拼盘推荐任务...") db = SessionLocal() try: # 创建预测服务实例 prediction_service = PredictionService(db) # 生成双色球推荐 logger.info("开始生成双色球拼盘推荐...") ssq_recommendations = prediction_service.generate_daily_recommendations( db, 'ssq', batch_size=4 ) logger.info(f"双色球拼盘推荐生成完成,共生成 {len(ssq_recommendations)} 注") # 生成大乐透推荐 logger.info("开始生成大乐透拼盘推荐...") dlt_recommendations = prediction_service.generate_daily_recommendations( db, 'dlt', batch_size=4 ) logger.info(f"大乐透拼盘推荐生成完成,共生成 {len(dlt_recommendations)} 注") logger.info("下午5点生成拼盘推荐任务完成") finally: db.close() except Exception as e: logger.error(f"下午5点生成拼盘推荐任务失败: {str(e)}") def start_scheduler(self): """启动定时任务调度器""" # 每天早上6点更新开奖数据 schedule.every().day.at("06:00").do(self.update_lottery_data_job) # 每天下午5点生成拼盘推荐 schedule.every().day.at("17:00").do(self.generate_daily_recommendations_job) logger.info("定时任务调度器已启动") logger.info("已设置任务:") logger.info("- 每天早上6点: 更新开奖数据") logger.info("- 每天下午5点: 生成拼盘推荐") # 运行调度器 while True: schedule.run_pending() time.sleep(60) # 每分钟检查一次 def main(): """主函数""" scheduler = LotteryScheduler() scheduler.start_scheduler() if __name__ == "__main__": main()