将队列长度计数器改为 redis 计数器

This commit is contained in:
virusdefender 2015-08-21 13:25:30 +08:00
parent 771101ab13
commit e4ff9e642a
2 changed files with 9 additions and 2 deletions

View File

@ -10,6 +10,8 @@ from settings import docker_config, source_code_dir, test_case_dir, submission_d
@app.task @app.task
def judge(submission_id, time_limit, memory_limit, test_case_id): def judge(submission_id, time_limit, memory_limit, test_case_id):
r = redis.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"])
r.incr("judge_queue_length")
try: try:
command = "%s run -t -i --privileged --rm=true " \ command = "%s run -t -i --privileged --rm=true " \
"-v %s:/var/judger/test_case/ " \ "-v %s:/var/judger/test_case/ " \
@ -36,4 +38,5 @@ def judge(submission_id, time_limit, memory_limit, test_case_id):
cur.execute("update submission set result=%s, info=%s where id=%s", cur.execute("update submission set result=%s, info=%s where id=%s",
(result["system_error"], str(e), submission_id)) (result["system_error"], str(e), submission_id))
conn.commit() conn.commit()
conn.close() conn.close()
r.decr("judge_queue_length")

View File

@ -3,13 +3,17 @@ import redis
import datetime import datetime
from rest_framework.views import APIView from rest_framework.views import APIView
from judge.judger.result import result from judge.judger.result import result
from judge.judger_controller.settings import redis_config
from utils.shortcuts import success_response from utils.shortcuts import success_response
from submission.models import Submission from submission.models import Submission
class QueueLengthMonitorAPIView(APIView): class QueueLengthMonitorAPIView(APIView):
def get(self, request): def get(self, request):
waiting_number = Submission.objects.filter(result=result["waiting"]).count() r = redis.Redis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"])
waiting_number = r.get("judge_queue_length")
if waiting_number is None:
waiting_number = 0
now = datetime.datetime.now() now = datetime.datetime.now()
return success_response({"time": ":".join([str(now.hour), str(now.minute), str(now.second)]), return success_response({"time": ":".join([str(now.hour), str(now.minute), str(now.second)]),
"count": waiting_number}) "count": waiting_number})