diff --git a/judge/judger_controller/tasks.py b/judge/judger_controller/tasks.py index 8382deb..cc3d7d5 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 0000000..9bad579 --- /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 0000000..9bad579 --- /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 0000000..9bad579 --- /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 0000000..a4fa50e --- /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 8d012d0..a8d1570 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 26e8d3a..e92716c 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