rpc 通信和判题初步测试通过;判题服务器不再依赖 redis 和 mysql。
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
34
judge_dispatcher/tasks.py
Normal 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()
|
||||
Reference in New Issue
Block a user