mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
使用 redis 消息队列来传递题目的结果。从而更新题目 ac 和 ts 计数器
This commit is contained in:
parent
46d2ea35c2
commit
c12c227ee9
@ -1,5 +1,5 @@
|
|||||||
# coding=utf-8
|
# coding=utf-8
|
||||||
import datetime
|
import json
|
||||||
import redis
|
import redis
|
||||||
import MySQLdb
|
import MySQLdb
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|||||||
1
mq/__init__.py
Normal file
1
mq/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# coding=utf-8
|
||||||
1
mq/models.py
Normal file
1
mq/models.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# coding=utf-8
|
||||||
1
mq/scripts/__init__.py
Normal file
1
mq/scripts/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
# coding=utf-8
|
||||||
37
mq/scripts/info.py
Normal file
37
mq/scripts/info.py
Normal file
@ -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()
|
||||||
@ -52,7 +52,10 @@ INSTALLED_APPS = (
|
|||||||
'problem',
|
'problem',
|
||||||
'admin',
|
'admin',
|
||||||
'submission',
|
'submission',
|
||||||
|
'mq',
|
||||||
|
|
||||||
|
|
||||||
|
'django_extensions',
|
||||||
'rest_framework',
|
'rest_framework',
|
||||||
'rest_framework_swagger',
|
'rest_framework_swagger',
|
||||||
)
|
)
|
||||||
|
|||||||
@ -60,18 +60,6 @@ class SubmissionAPIView(APIView):
|
|||||||
submission = Submission.objects.get(id=submission_id, user_id=request.user.id)
|
submission = Submission.objects.get(id=submission_id, user_id=request.user.id)
|
||||||
except Submission.DoesNotExist:
|
except Submission.DoesNotExist:
|
||||||
return error_response(u"提交不存在")
|
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}
|
response_data = {"result": submission.result}
|
||||||
if submission.result == 0:
|
if submission.result == 0:
|
||||||
response_data["accepted_answer_time"] = submission.accepted_answer_time
|
response_data["accepted_answer_time"] = submission.accepted_answer_time
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user