rss订阅数据爬取及数据处理
This commit is contained in:
@@ -23,11 +23,31 @@ class IntelligenceSystem:
|
||||
self._setup_signal_handlers()
|
||||
log.info("系统启动 - 运行在Cron调度模式")
|
||||
|
||||
# 时间追踪变量
|
||||
last_status_print_time = time.time() # 上次打印状态的时间
|
||||
last_hourly_report_time = time.time() # 上次小时统计的时间
|
||||
status_print_interval = 60 # 每分钟打印一次状态(60秒)
|
||||
hourly_report_interval = 3600 # 每小时统计一次(3600秒)
|
||||
|
||||
try:
|
||||
# 主循环 - 仅负责定期检查任务
|
||||
while self._running:
|
||||
current_time = time.time()
|
||||
|
||||
# 判断是否需要打印状态(每分钟一次)
|
||||
should_print_status = (current_time - last_status_print_time) >= status_print_interval
|
||||
|
||||
# 检查并执行到期任务
|
||||
self.scheduler.check_and_run_tasks()
|
||||
self.scheduler.check_and_run_tasks(print_empty_status=should_print_status)
|
||||
|
||||
# 更新最后打印时间
|
||||
if should_print_status:
|
||||
last_status_print_time = current_time
|
||||
|
||||
# 检查是否需要进行小时统计(每小时一次)
|
||||
if (current_time - last_hourly_report_time) >= hourly_report_interval:
|
||||
self._print_hourly_stats()
|
||||
last_hourly_report_time = current_time
|
||||
|
||||
# 短间隔轮询(每10秒检查一次,保证Cron时间精度)
|
||||
time.sleep(10)
|
||||
@@ -48,6 +68,29 @@ class IntelligenceSystem:
|
||||
log.info(f"收到关闭信号 {signum},开始关闭系统")
|
||||
self._running = False
|
||||
|
||||
def _print_hourly_stats(self):
|
||||
"""打印并重置小时统计信息"""
|
||||
stats = self.scheduler.get_and_reset_hourly_stats()
|
||||
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
print(f"\n{'='*60}")
|
||||
print(f"📊 小时任务统计报告 - {now}")
|
||||
print(f"{'='*60}")
|
||||
print(f" 总任务数: {stats['总数']}")
|
||||
print(f" 成功: {stats['成功']}")
|
||||
print(f" 失败: {stats['失败']}")
|
||||
if stats['总数'] > 0:
|
||||
success_rate = (stats['成功'] / stats['总数']) * 100
|
||||
print(f" 成功率: {success_rate:.1f}%")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
log.info(
|
||||
"小时任务统计",
|
||||
总任务数=stats['总数'],
|
||||
成功=stats['成功'],
|
||||
失败=stats['失败']
|
||||
)
|
||||
|
||||
def shutdown(self):
|
||||
"""优雅关闭系统"""
|
||||
log.info("开始优雅关闭系统")
|
||||
|
||||
Reference in New Issue
Block a user