Files
OnlineJudge/judge/tasks.py

24 lines
890 B
Python

import dramatiq
from account.models import User
from achievement.tasks import check_achievements
from judge.dispatcher import JudgeDispatcher
from judge.sql_dispatcher import SQLJudgeDispatcher
from submission.models import Submission
from utils.shortcuts import DRAMATIQ_WORKER_ARGS
@dramatiq.actor(**DRAMATIQ_WORKER_ARGS())
def judge_task(submission_id, problem_id):
submission = Submission.objects.get(id=submission_id)
if User.objects.get(id=submission.user_id).is_disabled:
return
# SQL 题不依赖 JudgeServer 沙箱,在 worker 内用 sqlite3 判题
if submission.language == "SQL":
SQLJudgeDispatcher(submission_id, problem_id).judge()
else:
JudgeDispatcher(submission_id, problem_id).judge()
# 判题结束后异步判定成就;投递失败不影响判题结果
check_achievements.send(submission.user_id, submission_id)