统一判题函数调用方法
This commit is contained in:
@@ -8,12 +8,18 @@ class JudgeServer(models.Model):
|
||||
# 这个服务器最大可能运行的判题实例数量
|
||||
max_instance_number = models.IntegerField()
|
||||
left_instance_number = models.IntegerField()
|
||||
workload = models.IntegerField(default=0)
|
||||
token = models.CharField(max_length=30)
|
||||
# 进行测试用例同步的时候加锁
|
||||
lock = models.BooleanField(default=False)
|
||||
# status 为 false 的时候代表不使用这个服务器
|
||||
status = models.BooleanField(default=True)
|
||||
|
||||
def use_judge_instance(self):
|
||||
self.left_instance_number -= 1
|
||||
self.workload = 100 - int(self.left_instance_number / self.max_instance_number)
|
||||
self.save()
|
||||
|
||||
class Meta:
|
||||
db_table = "judge_server"
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import time
|
||||
|
||||
from django.db import transaction
|
||||
|
||||
from celery import shared_task
|
||||
from rpc_client import TimeoutServerProxy
|
||||
|
||||
from judge.result import result
|
||||
@@ -14,6 +13,7 @@ from problem.models import Problem
|
||||
from submission.models import Submission
|
||||
from account.models import User
|
||||
from utils.cache import get_cache_redis
|
||||
from .models import JudgeServer,JudgeWaitingQueue
|
||||
|
||||
logger = logging.getLogger("app_info")
|
||||
|
||||
@@ -27,12 +27,18 @@ class JudgeDispatcher(object):
|
||||
self.user = User.objects.get(id=submission.user_id)
|
||||
|
||||
def choose_judge_server(self):
|
||||
pass
|
||||
servers = JudgeServer.objects.filter(workload__lt=100, lock=False, status=True).order_by("-workload")
|
||||
if servers.exists():
|
||||
return servers[0]
|
||||
|
||||
def judge(self):
|
||||
self.submission.judge_start_time = int(time.time() * 1000)
|
||||
try:
|
||||
judge_server = self.choose_judge_server()
|
||||
# 如果没有合适的判题服务器,就放入等待队列中等待判题
|
||||
if not judge_server:
|
||||
JudgeWaitingQueue.objects.create(submission_id=self.submission.id)
|
||||
return
|
||||
|
||||
s = TimeoutServerProxy(judge_server.ip + ":" + judge_server.port, timeout=20)
|
||||
data = s.run(self.submission.id, self.submission.language_code,
|
||||
|
||||
Reference in New Issue
Block a user