mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 08:23:20 +00:00
更改项目结构
This commit is contained in:
parent
702d51f495
commit
92ab7e5fb2
@ -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)
|
|
@ -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
|
||||||
|
|
@ -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"])
|
20
judger_controller/tasks.py
Normal file
20
judger_controller/tasks.py
Normal 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"
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user