rpc 通信和判题初步测试通过;判题服务器不再依赖 redis 和 mysql。

This commit is contained in:
virusdefender
2015-11-29 21:29:26 +08:00
parent 236102b6ac
commit 3311a4c899
15 changed files with 96 additions and 42 deletions

View File

@@ -1,16 +0,0 @@
# coding=utf-8
import socket
import redis
from .rpc_client import TimeoutServerProxy
from .settings import redis_config
from .models import JudgeServer
class JudgeDispatcher(object):
def __init__(self):
self.redis = redis.StrictRedis(host=redis_config["host"], port=redis_config["port"], db=redis_config["db"])
def judge(self):
pass

View File

@@ -3,7 +3,7 @@ from django.db import models
class JudgeServer(models.Model):
ip = models.IPAddressField()
ip = models.GenericIPAddressField()
port = models.IntegerField()
# 这个服务器最大可能运行的判题实例数量
max_instance_number = models.IntegerField()

View File

@@ -1,9 +0,0 @@
# coding=utf-8
import os
redis_config = {
"host": os.environ.get("REDIS_PORT_6379_TCP_ADDR"),
"port": 6379,
"db": 0
}

34
judge_dispatcher/tasks.py Normal file
View File

@@ -0,0 +1,34 @@
# coding=utf-8
import json
from celery import shared_task
from rpc_client import TimeoutServerProxy
from judge.result import result
from submission.models import Submission
@shared_task
def create_judge_task(submission_id, code, language_code, time_limit, memory_limit, test_case_id):
submission = Submission.objects.get(id=submission_id)
try:
s = TimeoutServerProxy('http://121.42.198.156:8080', timeout=20)
data = s.run(submission_id, language_code, code, time_limit, memory_limit, test_case_id)
print data
# 编译错误
if data["code"] == 1:
submission.result = result["compile_error"]
submission.info = data["data"]["error"]
# system error
elif data["code"] == 2:
submission.result = result["system_error"]
submission.info = data["data"]["error"]
elif data["code"] == 0:
submission.result = data["data"]["result"]
submission.info = json.dumps(data["data"]["info"])
submission.accepted_answer_time = data["data"]["accepted_answer_time"]
except Exception as e:
submission.result = result["system_error"]
submission.info = str(e)
finally:
submission.save()