ZHIWEI666 commited on
Commit
cff9a89
·
verified ·
1 Parent(s): 017b721

系统级优化

Browse files
app.py CHANGED
@@ -29,7 +29,7 @@ logging.basicConfig(
29
  logger = logging.getLogger("ComfyUI-Ranking")
30
 
31
 
32
- from 云端_定时版本检测引擎 import daily_version_check_task
33
 
34
  # ==========================================
35
  # 👥 用户模块 (拆分为3个子模块)
@@ -222,6 +222,9 @@ async def on_startup():
222
  asyncio.create_task(daily_version_check_task())
223
  logger.info("✅ 定时版本检测任务已挂载")
224
 
 
 
 
225
  # ========== 启动 HF 批量同步定时器 ==========
226
  db.start_batch_sync()
227
  logger.info("✅ HF 批量同步定时器已启动")
 
29
  logger = logging.getLogger("ComfyUI-Ranking")
30
 
31
 
32
+ from 云端_定时版本检测引擎 import daily_version_check_task, reset_daily_views_task
33
 
34
  # ==========================================
35
  # 👥 用户模块 (拆分为3个子模块)
 
222
  asyncio.create_task(daily_version_check_task())
223
  logger.info("✅ 定时版本检测任务已挂载")
224
 
225
+ asyncio.create_task(reset_daily_views_task())
226
+ logger.info("✅ daily_views 每日重置任务已挂载")
227
+
228
  # ========== 启动 HF 批量同步定时器 ==========
229
  db.start_batch_sync()
230
  logger.info("✅ HF 批量同步定时器已启动")
router_items.py CHANGED
@@ -166,7 +166,11 @@ async def create_item(item: ItemCreate):
166
  "netdisk_password": item.netdisk_password, # ☁️ 网盘密码
167
  "is_netdisk": item.is_netdisk, # ☁️ 是否网盘资源
168
  "is_original": item.is_original, # 🎨 是否为原创作品
169
- "likes": 0, "favorites": 0, "comments": 0, "uses": 0, "use_history": {}, "created_at": int(time.time()), "liked_by": [], "favorited_by": []
 
 
 
 
170
  }
171
  items_db.insert(0, new_item)
172
  db.save_data("items.json", items_db)
@@ -395,6 +399,9 @@ async def record_item_view(item_id: str, current_user: str = Depends(require_aut
395
  if result is None:
396
  raise HTTPException(status_code=404, detail="找不到该内容记录")
397
 
 
 
 
398
  return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
399
 
400
 
 
166
  "netdisk_password": item.netdisk_password, # ☁️ 网盘密码
167
  "is_netdisk": item.is_netdisk, # ☁️ 是否网盘资源
168
  "is_original": item.is_original, # 🎨 是否为原创作品
169
+ "likes": 0, "favorites": 0, "comments": 0, "uses": 0, "use_history": {}, "created_at": int(time.time()), "liked_by": [], "favorited_by": [],
170
+ "views": 0,
171
+ "daily_views": 0,
172
+ "viewed_by": [],
173
+ "daily_views_date": ""
174
  }
175
  items_db.insert(0, new_item)
176
  db.save_data("items.json", items_db)
 
399
  if result is None:
400
  raise HTTPException(status_code=404, detail="找不到该内容记录")
401
 
402
+ # 🗂️ 清除排序缓存(浏览量变化可能影响排序)
403
+ sort_cache.invalidate("items:")
404
+
405
  return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
406
 
407
 
router_posts.py CHANGED
@@ -163,7 +163,11 @@ async def create_post(post: PostCreate, current_user: str = Depends(require_auth
163
  "comments": 0,
164
  "liked_by": [],
165
  "favorited_by": [],
166
- "tip_board": [] # 打赏榜单
 
 
 
 
167
  }
168
 
169
  posts_db.insert(0, new_post)
@@ -458,4 +462,7 @@ async def record_post_view(post_id: str, current_user: str = Depends(require_aut
458
  if result is None:
459
  raise HTTPException(status_code=404, detail="帖子不存在")
460
 
 
 
 
461
  return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
 
163
  "comments": 0,
164
  "liked_by": [],
165
  "favorited_by": [],
166
+ "tip_board": [], # 打赏榜单
167
+ "views": 0,
168
+ "daily_views": 0,
169
+ "viewed_by": [],
170
+ "daily_views_date": ""
171
  }
172
 
173
  posts_db.insert(0, new_post)
 
462
  if result is None:
463
  raise HTTPException(status_code=404, detail="帖子不存在")
464
 
465
+ # 🗂️ 清除排序缓存(浏览量变化可能影响排序)
466
+ sort_cache.invalidate("posts:")
467
+
468
  return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
router_tasks.py CHANGED
@@ -396,7 +396,11 @@ async def create_task(task: TaskCreate, current_user: str = Depends(require_auth
396
  "comments": 0,
397
  "liked_by": [],
398
  "favorited_by": [],
399
- "tip_board": [] # 打赏榜单
 
 
 
 
400
  }
401
 
402
  tasks_db.insert(0, new_task)
@@ -1223,6 +1227,9 @@ async def record_task_view(task_id: str, current_user: str = Depends(require_aut
1223
  if result is None:
1224
  raise HTTPException(status_code=404, detail="任务不存在")
1225
 
 
 
 
1226
  return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
1227
 
1228
  # ==========================================
 
396
  "comments": 0,
397
  "liked_by": [],
398
  "favorited_by": [],
399
+ "tip_board": [], # 打赏榜单
400
+ "views": 0,
401
+ "daily_views": 0,
402
+ "viewed_by": [],
403
+ "daily_views_date": ""
404
  }
405
 
406
  tasks_db.insert(0, new_task)
 
1227
  if result is None:
1228
  raise HTTPException(status_code=404, detail="任务不存在")
1229
 
1230
+ # 🗂️ 清除排序缓存(浏览量变化可能影响排序)
1231
+ sort_cache.invalidate("tasks:")
1232
+
1233
  return {"status": "success", "views": result["views"], "daily_views": result["daily_views"]}
1234
 
1235
  # ==========================================
云端_定时版本检测引擎.py CHANGED
@@ -1,6 +1,7 @@
1
  # 云端_定时版本检测引擎.py
2
  import asyncio
3
  import datetime
 
4
  import httpx
5
  import logging
6
  import 数据库连接 as db
@@ -75,4 +76,63 @@ async def daily_version_check_task():
75
  db.save_data("versions.json", versions_db)
76
  print(f"✅ 版本检测任务完成,共发现并更新了 {updated_count} 个资源的新版本。")
77
  else:
78
- print("✅ 版本检测任务完成,暂无任何新版本发现。")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # 云端_定时版本检测引擎.py
2
  import asyncio
3
  import datetime
4
+ from datetime import date
5
  import httpx
6
  import logging
7
  import 数据库连接 as db
 
76
  db.save_data("versions.json", versions_db)
77
  print(f"✅ 版本检测任务完成,共发现并更新了 {updated_count} 个资源的新版本。")
78
  else:
79
+ print("✅ 版本检测任务完成,暂无任何新版本发现。")
80
+
81
+
82
+ async def reset_daily_views_task():
83
+ """
84
+ 每日重置 daily_views 计数器的守护进程
85
+ - 每小时检查一次,在 UTC+8 00:00 执行重置
86
+ - 使用 atomic_update 保证并发安全
87
+ """
88
+ # 需要处理的数据文件
89
+ data_files = ["items.json", "tasks.json", "posts.json"]
90
+
91
+ while True:
92
+ now = datetime.datetime.utcnow() + datetime.timedelta(hours=8)
93
+ today = date.today().isoformat()
94
+
95
+ # 计算距离今天 00:00 (UTC+8) 的秒数,如果过了就定在明天 00:00
96
+ next_run = now.replace(hour=0, minute=0, second=0, microsecond=0)
97
+ if now >= next_run:
98
+ next_run += datetime.timedelta(days=1)
99
+ sleep_seconds = (next_run - now).total_seconds()
100
+
101
+ print(f"📊 daily_views 重置引擎已挂载,距离下次 00:00 执行还有 {sleep_seconds} 秒...")
102
+ await asyncio.sleep(sleep_seconds)
103
+
104
+ print(f"🚀 [00:00] 开始执行 daily_views 每日重置任务 (日期: {today})...")
105
+
106
+ total_reset_count = 0
107
+
108
+ for file_name in data_files:
109
+ reset_count = 0
110
+
111
+ def reset_updater(data):
112
+ nonlocal reset_count
113
+ if not isinstance(data, list):
114
+ return
115
+
116
+ for record in data:
117
+ if not isinstance(record, dict):
118
+ continue
119
+
120
+ # 仅在 daily_views_date 不是今天时才重置
121
+ record_date = record.get("daily_views_date")
122
+ if record_date != today:
123
+ record["daily_views"] = 0
124
+ record["daily_views_date"] = today
125
+ reset_count += 1
126
+
127
+ try:
128
+ db.atomic_update(file_name, reset_updater, default_data=[])
129
+ total_reset_count += reset_count
130
+ if reset_count > 0:
131
+ print(f" ✓ {file_name}: 重置了 {reset_count} 条记录的 daily_views")
132
+ except Exception as e:
133
+ logger.error(f"重置 {file_name} 的 daily_views 失败: {e}")
134
+
135
+ if total_reset_count > 0:
136
+ print(f"✅ daily_views 重置任务完成,共重置 {total_reset_count} 条记录。")
137
+ else:
138
+ print("✅ daily_views 重置任务完成,没有需要重置的记录。")