From 92ab7e5fb279e4b05a01e72dc0ebe8e61edcfed5 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Wed, 12 Aug 2015 16:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=A1=B9=E7=9B=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- judge/controller/tasks.py | 13 ----------- {judge/judger => judger}/__init__.py | 0 {judge/judger => judger}/client.py | 0 {judge/judger => judger}/compiler.py | 0 {judge/judger => judger}/judge_exceptions.py | 0 {judge/judger => judger}/language.py | 0 {judge/judger => judger}/result.py | 0 {judge/judger => judger}/run.py | 23 ++++++++++++------- {judge/judger => judger}/settings.py | 0 {judge/judger => judger}/utils.py | 0 .../README.md | 0 .../__init__.py | 0 .../celery.py | 2 +- judger_controller/tasks.py | 20 ++++++++++++++++ submission/views.py | 6 ++--- 15 files changed, 39 insertions(+), 25 deletions(-) delete mode 100644 judge/controller/tasks.py rename {judge/judger => judger}/__init__.py (100%) rename {judge/judger => judger}/client.py (100%) rename {judge/judger => judger}/compiler.py (100%) rename {judge/judger => judger}/judge_exceptions.py (100%) rename {judge/judger => judger}/language.py (100%) rename {judge/judger => judger}/result.py (100%) rename {judge/judger => judger}/run.py (70%) rename {judge/judger => judger}/settings.py (100%) rename {judge/judger => judger}/utils.py (100%) rename {judge/controller => judger_controller}/README.md (100%) rename {judge/controller => judger_controller}/__init__.py (100%) rename {judge/controller => judger_controller}/celery.py (83%) create mode 100644 judger_controller/tasks.py diff --git a/judge/controller/tasks.py b/judge/controller/tasks.py deleted file mode 100644 index 42b88ee0..00000000 --- a/judge/controller/tasks.py +++ /dev/null @@ -1,13 +0,0 @@ -# coding=utf-8 -from __future__ import absolute_import -from judge.controller.celery import app -import subprocess32 as subprocess - - -@app.task -def judge(solution_id, time_limit, memory_limit, test_case_id): - subprocess.call("/usr/bin/docker run -t -i --privileged -v /var/test_case/:/var/judger/test_case/ " - "-v /var/code/:/var/judger/code/ judger python judge/judger/run.py " - "--solution_id %s --time_limit %s --memory_limit %s --test_case_id %s" % - (solution_id, str(time_limit), str(memory_limit), test_case_id), - timeout=(time_limit / 100) * 20) diff --git a/judge/judger/__init__.py b/judger/__init__.py similarity index 100% rename from judge/judger/__init__.py rename to judger/__init__.py diff --git a/judge/judger/client.py b/judger/client.py similarity index 100% rename from judge/judger/client.py rename to judger/client.py diff --git a/judge/judger/compiler.py b/judger/compiler.py similarity index 100% rename from judge/judger/compiler.py rename to judger/compiler.py diff --git a/judge/judger/judge_exceptions.py b/judger/judge_exceptions.py similarity index 100% rename from judge/judger/judge_exceptions.py rename to judger/judge_exceptions.py diff --git a/judge/judger/language.py b/judger/language.py similarity index 100% rename from judge/judger/language.py rename to judger/language.py diff --git a/judge/judger/result.py b/judger/result.py similarity index 100% rename from judge/judger/result.py rename to judger/result.py diff --git a/judge/judger/run.py b/judger/run.py similarity index 70% rename from judge/judger/run.py rename to judger/run.py index 40da1dcb..70d6db2e 100644 --- a/judge/judger/run.py +++ b/judger/run.py @@ -10,6 +10,11 @@ from compiler import compile_ from result import result from settings import judger_workspace +import sys +import os +sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..')) +print sys.path + from oj import settings # 简单的解析命令行参数 @@ -46,12 +51,14 @@ except Exception as e: print [{"result": result["compile_error"]}] exit() -client = JudgeClient(language_code=language, - exe_path=exe_path, - max_cpu_time=int(time_limit), - max_real_time=int(time_limit) * 2, - max_memory=int(memory_limit), - test_case_dir="/var/judger/test_case/" + str(test_case_id) + "/") -print client.run() - +try: + client = JudgeClient(language_code=language, + exe_path=exe_path, + max_cpu_time=int(time_limit), + max_real_time=int(time_limit) * 2, + max_memory=int(memory_limit), + test_case_dir="/var/judger/test_case/" + str(test_case_id) + "/") + print client.run() +except Exception as e: + print e diff --git a/judge/judger/settings.py b/judger/settings.py similarity index 100% rename from judge/judger/settings.py rename to judger/settings.py diff --git a/judge/judger/utils.py b/judger/utils.py similarity index 100% rename from judge/judger/utils.py rename to judger/utils.py diff --git a/judge/controller/README.md b/judger_controller/README.md similarity index 100% rename from judge/controller/README.md rename to judger_controller/README.md diff --git a/judge/controller/__init__.py b/judger_controller/__init__.py similarity index 100% rename from judge/controller/__init__.py rename to judger_controller/__init__.py diff --git a/judge/controller/celery.py b/judger_controller/celery.py similarity index 83% rename from judge/controller/celery.py rename to judger_controller/celery.py index 8e776e2d..d7e0d476 100644 --- a/judge/controller/celery.py +++ b/judger_controller/celery.py @@ -2,4 +2,4 @@ from __future__ import absolute_import from celery import Celery -app = Celery("judge", broker="redis://localhost:6379/0", include=["judge.controller.tasks"]) \ No newline at end of file +app = Celery("judge", broker="redis://localhost:6379/0", include=["judger_controller.tasks"]) \ No newline at end of file diff --git a/judger_controller/tasks.py b/judger_controller/tasks.py new file mode 100644 index 00000000..9ac60072 --- /dev/null +++ b/judger_controller/tasks.py @@ -0,0 +1,20 @@ +# coding=utf-8 +from __future__ import absolute_import +from judger_controller.celery import app +import subprocess32 as subprocess + + +@app.task +def judge(solution_id, time_limit, memory_limit, test_case_id): + try: + subprocess.call("docker run -t -i --privileged --rm=true " + "-v /var/test_case/:/var/judger/test_case/ " + "-v /Users/virusdefender/Desktop/:/var/judger/code/ " + "-p 27017:27017 " + "judger " + "python judger/run.py " + "--solution_id %s --time_limit %s --memory_limit %s --test_case_id %s" % + (solution_id, str(time_limit), str(memory_limit), test_case_id), + timeout=(time_limit / 100) * 20, shell=True) + except subprocess.TimeoutExpired: + print "docker timeout" diff --git a/submission/views.py b/submission/views.py index 1208632c..993de50f 100644 --- a/submission/views.py +++ b/submission/views.py @@ -8,8 +8,8 @@ from rest_framework.views import APIView from django.conf import settings -from judge.judger.result import result -from judge.controller.tasks import judge +from judger.result import result +from judger_controller.tasks import judge from account.decorators import login_required from problem.models import Problem from utils.shortcuts import serializer_invalid_response, error_response, success_response @@ -42,7 +42,7 @@ class SubmissionnAPIView(APIView): connection = pymongo.MongoClient(host=mongodb_setting["HOST"], port=mongodb_setting["PORT"]) collection = connection["oj"]["oj_submission"] submission_id = str(collection.insert_one(data).inserted_id) - judge.delay(submission_id, problem.max_cpu_time, problem.max_memory, problem.test_case_id) + judge.delay(submission_id, problem.time_limit, problem.memory_limit, problem.test_case_id) return success_response({"submission_id": submission_id}) else: return serializer_invalid_response(serializer)