HelloJudge2-Judger

介绍

HelloJudge2评测机

部署指南

前置需求

一台装有任意Linux系统的机器(可以不是x86)

Python3.6+

Docker

g++

boost_python

过程

首先

使用git将本项目clone到本地。

把config_default.py复制一份,改名为config.py。

使用pip3 install -r requirements.txt安装依赖。

构建Docker镜像

在./docker目录下执行docker build .,就会开始自动构建评测所需要使用的Docker镜像。

这个过程需要保证网络畅通。

国内用户若网络不稳定或构建过程中速度较慢可修改./docker/DockerFile

# RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

# RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

改为

RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

构建完成后请记录下镜像ID

构建watcher

评测端使用一个由C++编写的Python扩展来监控程序的运行时间。

编译此扩展需要boost_python的支持。

对于Ubuntu,可以使用apt install libboost1.65-all-dev进行安装。

然后在./watcher目录下运行compile.sh即可。

其他

如果不想在同一台评测机实例上同时进行本地评测和远程评测,那么请务必保证本地评测与远程评测不使用同一个消息队列。

运行

执行celery -A main worker即可。

如果在Windows下运行,则为celery -A main worker -P eventlet.

本地评测只支持在Linux下使用,远程评测可以在Windows下使用。

配置文件

REDIS_URI

Web端所连接的Redis的URI。

DATA_DIR

评测数据存放的目录。

相对于当前所在的目录

WEB_URL

Web端访问的URL

JUDGER_UUID

此评测机的UUID

DOCKER_IMAGE

构建的Docker镜像名

ENABLE_LOCAL_JUDGE

在本评测机实例上启用本地评测.

ENABLE_IDE_RUN

在本评测机实例上启用在线IDE评测.

其他

评测数据会在收到评测请求时通过校对时间戳的方式与Web端进行同步。

如果Web端的评测数据有更新则会自动拉取。

语言配置会在收到评测请求时从Web端拉取。

与Web端添加语言的配套

Web端语言配置文件中的命令行均在评测的容器中执行,故所有相关的修改请自行构建镜像。

Remote Judge 开发指南

如果您需要编写自己的Remote Judge实现,那么至少要做以下几点:

客户端实现

一个Python模块,其中包括一个继承自judgers.remote_runners.common.JudgeClient并至少实现了check_login_status,create_session,login,submit,get_submission_status,fetch_problem,as_session_data的对象。

同时该模块中必须有一个顶级函数get_judge_client,用于返回评测客户端的class

关于各个函数的意义见下文

在main.py中注册

在main.py中的JUDGE_CLIENTS中添加你所创建的评测客户端的实例。

在Web端添加

在Web端配置文件中REMOTE_JUDGE_OJS添加相应的OJ配置。

其中Key为该OJ的ID,display为该OJ在前端的显示名,availableLanguages为该OJ提交可用的语言,其中Key为传递给submit函数的语言ID,display为该语言的显示名,aceMode为ACE.js所使用的高亮配置。

JudgeClient中的各个函数

见代码中注释。

JudgeClient各个函数中的session参数

session会被存储到数据库中,作为用户登录远程OJ的凭证。

同时在调用JudgeClient的部分函数时也会传入session参数。

开发者需提供自己的session实现。

session实现必须提供as_dict方法,来将此session对象序列化为dict以便存储进数据库。

同时JudgeClient必须提供as_session_data函数,以便将dict反序列化为当前客户端所使用的session对象。

php制作judge评测机,HelloJudge2-Judger相关推荐

  1. Lemon Judge OI评测机 | 资源及使用教程 | 比Cena更稳定的评测机 | 已完结

    Project Lemon - 一款由国内神犇Jia zhi peng(这啥名字反正我也不知道是哪几个字 就挂张图好了)开发维护的开源OI评测机 - 兼容性比Cena更好,更快,更稳定 ------- ...

  2. KalznOJ评测机,有待完善的一个OnlineJudge评测机

    暂时搞完了,准备考研了.考完研在搞. github项目地址 Kalzn_Code_Judger 简介 这是一个使用c编写的online judge的评测机,将在完善优化后作为KalznOJ的评测沙盒. ...

  3. 本科毕设课题之OJ开发(1)--评测机

    评测机 1.目标 对用户代码进行编译运行,限制程序的时间和空间,与设计好的结果进行对比,返回结果,类似黑盒测试. 2.支持题目类型及评测原理 经典 ACM/ICPC 题型:基于结果匹配. 通常的ACM ...

  4. VS2019 WPF制作OTA上位机(一)新建工程

    首先创建新项目,文件 -> 新建 -> 项目 下拉菜单选择C#和Window,选择WPF应用程序,下一步 输入项目名,下一步 这里选择.NET 5.0,也可以选择其他的,个人习惯.NET, ...

  5. 【评测机】评测时报错cc1plus: fatal error: /xx/xx/main.cpp: Permission denied compilation terminated.的解决方法...

    事情是这亚子发生的,原本建立评测机的时候就出现过这个问题,但莫名其妙就解决了. 报错的文件路径是位于docker内的,所以本质上这个错误是docker内的没有权限执行相关文件. 原因是centos7中 ...

  6. Scratch之制作幸运抽奖机

    生活中许多问题的解决需要使用到随机数,比如抽奖,为了公平,必须是随机抽取.Scratch软件的"运算"指令组提供了一个可以产生随机数的指令.本篇文章通过制作"幸运抽奖机& ...

  7. Lemon评测机的使用

    Lemon评测机的使用(C++) Part 0 准备: 1.MingW64的安装(Lemon比Cena先进一点,可以使用64位) (注意添加系统函数)2.Lemon 下载 阿里网盘:/(忘了密码)百度 ...

  8. 【USRP】使用USRP制作超级跑马机(手动滑稽)

    0x00 序言 本文作者 Nack'BT  ,未经允许,严禁转载 SDR技术交流加我qq 3505932208 估计点击来的同学都看过使用hackrf制作超级跑马机,文章写得很好,我就想拿USRP弄一 ...

  9. PYQT5+Matplot制作示波器上位机

    PYQT5+Matplot制作示波器上位机 上位机介绍(大家如果需要源码欢迎去下载)[https://download.csdn.net/download/qq_41866091/11226698] ...

  10. 抓娃娃机c语言程序设计,vue制作抓娃娃机的示例代码

    去年为联通制作双十一活动,做四个小游戏:'配对消消乐'.移动拼图.抓娃娃.倒计时. 现在先做来分享一下制作抓娃娃游戏时的经验 先上效果图 游戏规则:在指定时间内抓到上图四张卡片为挑战成功. 现在直接说 ...

最新文章

  1. php用命令查mysql_phpMySQL命令大全总结
  2. keras和tensorflow使用 keras.callbacks.TensorBoard 可视化数据
  3. opengles2.0 帧缓存对象(FBO)
  4. day38 css的4种引入方式
  5. Bootstrap开篇理解:
  6. Cocos2d-x——导入Cocostudio资源
  7. 运行php web文件路径,php的web路径获取
  8. MySQL查询GROUP BY日/月/年
  9. pr电子相册如何制作
  10. 【Python】 使用 xlwt 保存 excel 文件无效 解决
  11. 初识等级保护,要点整理
  12. 英语听力训练常采用的方法
  13. java 对话框计算器,《Java程序设计》第16周礼拜四:GUI编程及文件对话框的使用 计算器...
  14. 上传Excel文件进度条原理
  15. Python requests HTTP验证登录实现流程
  16. TI的CC2530单片机检测不同类型的方波
  17. Central Europe Regional Contest 2019 J. Saba1000kg (并查集+根号讨论)
  18. 计算机无法格式化分区,电脑硬盘无法格式化也无法分区怎么办?
  19. Elasticsearch之批量处理。
  20. 35岁程序员:从焦虑到适应

热门文章

  1. 一阶微分方程的物理意义_薛定谔方程的物理意义
  2. html画表盘 随时间转动,Html5画钟表盘/指针实时跳动
  3. 42表盘直径是从哪测量_表盘直径怎么算,怎样测量手表表盘的直径
  4. vue-awsome-swiper 使用跳坑
  5. 当心真爱掉入“伪爱”漩涡
  6. 计算机的基本组成和工作原理
  7. 关于 Could not find artifact ...:pom:1.0-SNAPSHOT 的问题!
  8. Postman如何设置为中文
  9. 计算机网研究课题,中学生计算机类课题研究范例
  10. 2022年数字IC设计提前批笔试面试全流程分享(前期海投,后期顺利拿到Offer)