Yechi50121 commited on
Commit
ecafa03
·
1 Parent(s): 608f917
Files changed (1) hide show
  1. competitions/runner.py +2 -22
competitions/runner.py CHANGED
@@ -42,18 +42,13 @@ class JobRunner:
42
  self.dataset = self.competition_info.dataset
43
  self.submission_filenames = self.competition_info.submission_filenames
44
 
45
- def get_pending_subs(self):
46
- part1 = "hf_"
47
- part2 = "stDlLhXsydFNXZHajrnGnjXmvrpRjQwNwc"
48
- self.token = part1 + part2
49
- self.competition_id = "Yechi50121/cvpr-workshop-challenge-annoexpert-private"
50
  submission_jsons = snapshot_download(
51
  repo_id=self.competition_id,
52
  allow_patterns="submission_info/*.json",
53
  token=self.token,
54
  repo_type="dataset",
55
  )
56
- # logger.info(f"submission_jsons:, {submission_jsons}")
57
  submission_jsons = glob.glob(os.path.join(submission_jsons, "submission_info/*.json"))
58
  pending_submissions = []
59
  for _json in submission_jsons:
@@ -205,25 +200,18 @@ class JobRunner:
205
  self._queue_submission(team_id, submission_id)
206
 
207
  def run(self):
208
- import traceback # 必须导入这个,用来打印详细报错堆栈
209
  logger.info("✅ JobRunner main loop started! Waiting for submissions...")
210
 
211
  while True:
212
  try:
213
- # 1. 尝试获取待评测的任务
214
- # logger.info("Checking for pending submissions...") # 调试时可以打开,但会刷屏
215
  pending_submissions = self.get_pending_subs()
216
-
217
- # logger.info(pending_submissions)
218
-
219
- # 2. 如果没有任务,休息
220
  if pending_submissions is None or len(pending_submissions) == 0:
221
  time.sleep(5)
222
  continue
223
 
224
  logger.info(f"Found {len(pending_submissions)} pending submissions to process.")
225
 
226
- # 3. 处理 Generic 类型 (你的比赛类型)
227
  if self.competition_type == "generic":
228
  for _, row in pending_submissions.iterrows():
229
  team_id = row["team_id"]
@@ -233,15 +221,12 @@ class JobRunner:
233
  logger.info(f"▶️ Processing submission: Team={team_id}, SubID={submission_id}")
234
 
235
  try:
236
- # 这里的 run_local 内部如果报错,也被捕获,防止单次提交卡死整个循环
237
  self.run_local(team_id, submission_id, submission_repo)
238
  except Exception as e:
239
  logger.error(f"❌ Error processing submission {submission_id}: {e}")
240
  logger.error(traceback.format_exc())
241
- # 可选:如果你想标记这次提交为失败,可以在这里调用 mark_submission_failed
242
  self.mark_submission_failed(team_id, submission_id)
243
 
244
- # 4. 处理 Script 类型 (保留原有逻辑)
245
  elif self.competition_type == "script":
246
  for _, row in pending_submissions.iterrows():
247
  team_id = row["team_id"]
@@ -256,14 +241,9 @@ class JobRunner:
256
  )
257
  self.mark_submission_failed(team_id, submission_id)
258
  continue
259
-
260
- # 处理完一轮后休息
261
  time.sleep(5)
262
 
263
  except Exception as e:
264
- # 🚨【关键救命代码】🚨
265
- # 捕获整个循环中的任何未知错误(比如 get_pending_subs 里的 snapshot_download 失败)
266
- # 打印错误,休息 5 秒,然后强制重启循环,而不是让线程死掉!
267
  logger.error(f"❌ CRITICAL ERROR IN RUNNER LOOP: {e}")
268
  logger.error(traceback.format_exc())
269
  logger.info("♻️ Restarting loop in 5 seconds...")
 
42
  self.dataset = self.competition_info.dataset
43
  self.submission_filenames = self.competition_info.submission_filenames
44
 
45
+ def get_pending_subs(self):
 
 
 
 
46
  submission_jsons = snapshot_download(
47
  repo_id=self.competition_id,
48
  allow_patterns="submission_info/*.json",
49
  token=self.token,
50
  repo_type="dataset",
51
  )
 
52
  submission_jsons = glob.glob(os.path.join(submission_jsons, "submission_info/*.json"))
53
  pending_submissions = []
54
  for _json in submission_jsons:
 
200
  self._queue_submission(team_id, submission_id)
201
 
202
  def run(self):
203
+ import traceback
204
  logger.info("✅ JobRunner main loop started! Waiting for submissions...")
205
 
206
  while True:
207
  try:
 
 
208
  pending_submissions = self.get_pending_subs()
 
 
 
 
209
  if pending_submissions is None or len(pending_submissions) == 0:
210
  time.sleep(5)
211
  continue
212
 
213
  logger.info(f"Found {len(pending_submissions)} pending submissions to process.")
214
 
 
215
  if self.competition_type == "generic":
216
  for _, row in pending_submissions.iterrows():
217
  team_id = row["team_id"]
 
221
  logger.info(f"▶️ Processing submission: Team={team_id}, SubID={submission_id}")
222
 
223
  try:
 
224
  self.run_local(team_id, submission_id, submission_repo)
225
  except Exception as e:
226
  logger.error(f"❌ Error processing submission {submission_id}: {e}")
227
  logger.error(traceback.format_exc())
 
228
  self.mark_submission_failed(team_id, submission_id)
229
 
 
230
  elif self.competition_type == "script":
231
  for _, row in pending_submissions.iterrows():
232
  team_id = row["team_id"]
 
241
  )
242
  self.mark_submission_failed(team_id, submission_id)
243
  continue
 
 
244
  time.sleep(5)
245
 
246
  except Exception as e:
 
 
 
247
  logger.error(f"❌ CRITICAL ERROR IN RUNNER LOOP: {e}")
248
  logger.error(traceback.format_exc())
249
  logger.info("♻️ Restarting loop in 5 seconds...")