使用 huey 异步队列。 ps 真想自己写一个异步队列,rq 不支持多 worker,celery 太复杂了

This commit is contained in:
virusdefender 2015-12-07 21:19:55 +08:00
parent bf6a42b5b1
commit 2f55799457
4 changed files with 19 additions and 22 deletions

View File

@ -11,5 +11,4 @@ supervisor
pillow
jsonfield
Envelopes
rq
django-rq
huey

View File

@ -61,7 +61,7 @@ INSTALLED_APPS = (
'django_extensions',
'rest_framework',
'django_rq',
'huey.djhuey',
)
if DEBUG:
@ -195,17 +195,11 @@ WEBSITE_INFO = {"website_name": "qduoj",
"website_footer": u"青岛大学信息工程学院 创新实验室",
"url": "https://qduoj.com"}
RQ_QUEUES = {
'judge': {
'HOST': REDIS_QUEUE["host"],
'PORT': REDIS_QUEUE["port"],
'DB': 2,
'DEFAULT_TIMEOUT': 60,
},
'mail': {
'HOST': REDIS_QUEUE["host"],
'PORT': REDIS_QUEUE["port"],
'DB': 3,
'DEFAULT_TIMEOUT': 60,
}
HUEY = {
'backend': 'huey.backends.redis_backend',
'name': 'task_queue',
'connection': {'host': REDIS_QUEUE["host"], 'port': REDIS_QUEUE["port"], 'db': REDIS_QUEUE["db"]},
'always_eager': False, # Defaults to False when running via manage.py run_huey
# Options to pass into the consumer when running ``manage.py run_huey``
'consumer_options': {'workers': 50},
}

9
submission/tasks.py Normal file
View File

@ -0,0 +1,9 @@
# coding=utf-8
from huey.djhuey import task
from judge_dispatcher.tasks import JudgeDispatcher
@task()
def _judge(submission, time_limit, memory_limit, test_case_id):
JudgeDispatcher(submission, time_limit, memory_limit, test_case_id).judge()

View File

@ -7,14 +7,13 @@ from django.shortcuts import render
from django.core.paginator import Paginator
from rest_framework.views import APIView
from judge_dispatcher.tasks import JudgeDispatcher
from account.decorators import login_required, super_admin_required
from account.models import SUPER_ADMIN, User
from problem.models import Problem
from contest.models import ContestProblem, Contest
from contest.decorators import check_user_contest_permission
from utils.shortcuts import serializer_invalid_response, error_response, success_response, error_page, paginate
from utils.cache import get_cache_redis
from .task import _judge
from .models import Submission
from .serializers import (CreateSubmissionSerializer, SubmissionSerializer,
SubmissionhareSerializer, SubmissionRejudgeSerializer,
@ -23,10 +22,6 @@ from .serializers import (CreateSubmissionSerializer, SubmissionSerializer,
logger = logging.getLogger("app_info")
def _judge(submission, time_limit, memory_limit, test_case_id):
JudgeDispatcher(submission, time_limit, memory_limit, test_case_id).judge()
class SubmissionAPIView(APIView):
@login_required
def post(self, request):