From c12c227ee9bb32e15aa9e7ee673d7c2ce518875a Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sat, 22 Aug 2015 12:56:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=20redis=20=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=98=9F=E5=88=97=E6=9D=A5=E4=BC=A0=E9=80=92=E9=A2=98=E7=9B=AE?= =?UTF-8?q?=E7=9A=84=E7=BB=93=E6=9E=9C=E3=80=82=E4=BB=8E=E8=80=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E9=A2=98=E7=9B=AE=20ac=20=E5=92=8C=20ts=20=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- judge/judger_controller/tasks.py | 2 +- mq/__init__.py | 1 + mq/models.py | 1 + mq/scripts/__init__.py | 1 + mq/scripts/info.py | 37 ++++++++++++++++++++++++++++++++ oj/settings.py | 3 +++ submission/views.py | 12 ----------- 7 files changed, 44 insertions(+), 13 deletions(-) create mode 100644 mq/__init__.py create mode 100644 mq/models.py create mode 100644 mq/scripts/__init__.py create mode 100644 mq/scripts/info.py diff --git a/judge/judger_controller/tasks.py b/judge/judger_controller/tasks.py index 8382deb5..cc3d7d57 100644 --- a/judge/judger_controller/tasks.py +++ b/judge/judger_controller/tasks.py @@ -1,5 +1,5 @@ # coding=utf-8 -import datetime +import json import redis import MySQLdb import subprocess diff --git a/mq/__init__.py b/mq/__init__.py new file mode 100644 index 00000000..9bad5790 --- /dev/null +++ b/mq/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/mq/models.py b/mq/models.py new file mode 100644 index 00000000..9bad5790 --- /dev/null +++ b/mq/models.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/mq/scripts/__init__.py b/mq/scripts/__init__.py new file mode 100644 index 00000000..9bad5790 --- /dev/null +++ b/mq/scripts/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/mq/scripts/info.py b/mq/scripts/info.py new file mode 100644 index 00000000..a4fa50e3 --- /dev/null +++ b/mq/scripts/info.py @@ -0,0 +1,37 @@ +# coding=utf-8 +import json +import redis +from judge.judger_controller.settings import redis_config +from judge.judger.result import result +from submission.models import Submission +from problem.models import Problem + + +class MessageQueue(object): + def __init__(self): + self.conn = redis.StrictRedis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"]) + self.queue = 'queue' + + def listen_task(self): + while True: + submission_id = self.conn.blpop(self.queue, 0)[1] + print submission_id + try: + submission = Submission.objects.get(id=submission_id) + except Submission.DoesNotExist: + print "error 1" + pass + + if submission.result == result["accepted"]: + # 更新题目的 ac 计数器 + try: + problem = Problem.objects.get(id=submission.problem_id) + problem.total_accepted_number += 1 + problem.save() + except Problem.DoesNotExist: + print "error 2" + pass + + +print "mq running" +MessageQueue().listen_task() diff --git a/oj/settings.py b/oj/settings.py index 8d012d03..a8d1570c 100644 --- a/oj/settings.py +++ b/oj/settings.py @@ -52,7 +52,10 @@ INSTALLED_APPS = ( 'problem', 'admin', 'submission', + 'mq', + + 'django_extensions', 'rest_framework', 'rest_framework_swagger', ) diff --git a/submission/views.py b/submission/views.py index 26e8d3a4..e92716c9 100644 --- a/submission/views.py +++ b/submission/views.py @@ -60,18 +60,6 @@ class SubmissionAPIView(APIView): submission = Submission.objects.get(id=submission_id, user_id=request.user.id) except Submission.DoesNotExist: return error_response(u"提交不存在") - # 标记这个submission 已经被统计 - if not submission.is_counted: - submission.is_counted = True - submission.save() - if submission.result == result["accepted"]: - # 更新题目的 ac 计数器 - try: - problem = Problem.objects.get(id=submission.problem_id) - problem.total_accepted_number += 1 - problem.save() - except Problem.DoesNotExist: - pass response_data = {"result": submission.result} if submission.result == 0: response_data["accepted_answer_time"] = submission.accepted_answer_time