diff --git a/dockerfiles/oj_web_server/requirements.txt b/dockerfiles/oj_web_server/requirements.txt index a0582be3..56676a92 100644 --- a/dockerfiles/oj_web_server/requirements.txt +++ b/dockerfiles/oj_web_server/requirements.txt @@ -11,5 +11,4 @@ supervisor pillow jsonfield Envelopes -rq -django-rq \ No newline at end of file +huey \ No newline at end of file diff --git a/oj/settings.py b/oj/settings.py index 02b08169..391c8b09 100644 --- a/oj/settings.py +++ b/oj/settings.py @@ -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}, } \ No newline at end of file diff --git a/submission/tasks.py b/submission/tasks.py new file mode 100644 index 00000000..67719c47 --- /dev/null +++ b/submission/tasks.py @@ -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() \ No newline at end of file diff --git a/submission/views.py b/submission/views.py index 3a54bc92..6a16eaf6 100644 --- a/submission/views.py +++ b/submission/views.py @@ -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):