更改项目结构

This commit is contained in:
virusdefender 2015-08-12 16:49:25 +08:00
parent 702d51f495
commit 92ab7e5fb2
15 changed files with 39 additions and 25 deletions

View File

@ -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)

View File

@ -10,6 +10,11 @@ from compiler import compile_
from result import result from result import result
from settings import judger_workspace 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 from oj import settings
# 简单的解析命令行参数 # 简单的解析命令行参数
@ -46,12 +51,14 @@ except Exception as e:
print [{"result": result["compile_error"]}] print [{"result": result["compile_error"]}]
exit() exit()
client = JudgeClient(language_code=language, try:
client = JudgeClient(language_code=language,
exe_path=exe_path, exe_path=exe_path,
max_cpu_time=int(time_limit), max_cpu_time=int(time_limit),
max_real_time=int(time_limit) * 2, max_real_time=int(time_limit) * 2,
max_memory=int(memory_limit), max_memory=int(memory_limit),
test_case_dir="/var/judger/test_case/" + str(test_case_id) + "/") test_case_dir="/var/judger/test_case/" + str(test_case_id) + "/")
print client.run() print client.run()
except Exception as e:
print e

View File

@ -2,4 +2,4 @@
from __future__ import absolute_import from __future__ import absolute_import
from celery import Celery from celery import Celery
app = Celery("judge", broker="redis://localhost:6379/0", include=["judge.controller.tasks"]) app = Celery("judge", broker="redis://localhost:6379/0", include=["judger_controller.tasks"])

View File

@ -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"

View File

@ -8,8 +8,8 @@ from rest_framework.views import APIView
from django.conf import settings from django.conf import settings
from judge.judger.result import result from judger.result import result
from judge.controller.tasks import judge from judger_controller.tasks import judge
from account.decorators import login_required from account.decorators import login_required
from problem.models import Problem from problem.models import Problem
from utils.shortcuts import serializer_invalid_response, error_response, success_response 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"]) connection = pymongo.MongoClient(host=mongodb_setting["HOST"], port=mongodb_setting["PORT"])
collection = connection["oj"]["oj_submission"] collection = connection["oj"]["oj_submission"]
submission_id = str(collection.insert_one(data).inserted_id) 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}) return success_response({"submission_id": submission_id})
else: else:
return serializer_invalid_response(serializer) return serializer_invalid_response(serializer)