Commit ·
ecafa03
1
Parent(s): 608f917
update
Browse files- 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...")
|