From eab80024a82d8efc9fcc561b21a8454178b5baed Mon Sep 17 00:00:00 2001 From: virusdefender Date: Wed, 3 Apr 2019 12:07:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20JudgeServer=20task=5Fnumbe?= =?UTF-8?q?r=20=E5=B9=B6=E5=8F=91=E6=9B=B4=E6=96=B0=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/views.py | 6 +++--- docs/data.json | 8 ++++++++ judge/dispatcher.py | 8 +++++--- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/conf/views.py b/conf/views.py index b0b4cad..be73744 100644 --- a/conf/views.py +++ b/conf/views.py @@ -146,7 +146,7 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView): server.service_url = data["service_url"] server.ip = request.ip server.last_heartbeat = timezone.now() - server.save() + server.save(update_fields=["judger_version", "cpu_core", "memory_usage", "service_url", "ip", "last_heartbeat"]) except JudgeServer.DoesNotExist: JudgeServer.objects.create(hostname=data["hostname"], judger_version=data["judger_version"], @@ -157,8 +157,8 @@ class JudgeServerHeartbeatAPI(CSRFExemptAPIView): service_url=data["service_url"], last_heartbeat=timezone.now(), ) - # 新server上线 处理队列中的,防止没有新的提交而导致一直waiting - process_pending_task() + # 新server上线 处理队列中的,防止没有新的提交而导致一直waiting + process_pending_task() return self.success() diff --git a/docs/data.json b/docs/data.json index f8d5a63..6d86d76 100644 --- a/docs/data.json +++ b/docs/data.json @@ -1,5 +1,13 @@ { "update": [ + { + "version": "2019-04-03", + "level": "Important", + "title": "2019-04-03", + "details": [ + "Fix bugs in judge server scheduler" + ] + }, { "version": "2019-03-25", "level": "Recommend", diff --git a/judge/dispatcher.py b/judge/dispatcher.py index 9204e54..bd099ac 100644 --- a/judge/dispatcher.py +++ b/judge/dispatcher.py @@ -25,8 +25,10 @@ def process_pending_task(): if cache.llen(CacheKey.waiting_queue): # 防止循环引入 from judge.tasks import judge_task - data = json.loads(cache.rpop(CacheKey.waiting_queue).decode("utf-8")) - judge_task.send(**data) + tmp_data = cache.rpop(CacheKey.waiting_queue) + if tmp_data: + data = json.loads(tmp_data.decode("utf-8")) + judge_task.send(**data) class ChooseJudgeServer: @@ -40,7 +42,7 @@ class ChooseJudgeServer: for server in servers: if server.task_number <= server.cpu_core * 2: server.task_number = F("task_number") + 1 - server.save() + server.save(update_fields=["task_number"]) self.server = server return server return None