php制作judge评测机,HelloJudge2-Judger
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相关推荐
- Lemon Judge OI评测机 | 资源及使用教程 | 比Cena更稳定的评测机 | 已完结
Project Lemon - 一款由国内神犇Jia zhi peng(这啥名字反正我也不知道是哪几个字 就挂张图好了)开发维护的开源OI评测机 - 兼容性比Cena更好,更快,更稳定 ------- ...
- KalznOJ评测机,有待完善的一个OnlineJudge评测机
暂时搞完了,准备考研了.考完研在搞. github项目地址 Kalzn_Code_Judger 简介 这是一个使用c编写的online judge的评测机,将在完善优化后作为KalznOJ的评测沙盒. ...
- 本科毕设课题之OJ开发(1)--评测机
评测机 1.目标 对用户代码进行编译运行,限制程序的时间和空间,与设计好的结果进行对比,返回结果,类似黑盒测试. 2.支持题目类型及评测原理 经典 ACM/ICPC 题型:基于结果匹配. 通常的ACM ...
- VS2019 WPF制作OTA上位机(一)新建工程
首先创建新项目,文件 -> 新建 -> 项目 下拉菜单选择C#和Window,选择WPF应用程序,下一步 输入项目名,下一步 这里选择.NET 5.0,也可以选择其他的,个人习惯.NET, ...
- 【评测机】评测时报错cc1plus: fatal error: /xx/xx/main.cpp: Permission denied compilation terminated.的解决方法...
事情是这亚子发生的,原本建立评测机的时候就出现过这个问题,但莫名其妙就解决了. 报错的文件路径是位于docker内的,所以本质上这个错误是docker内的没有权限执行相关文件. 原因是centos7中 ...
- Scratch之制作幸运抽奖机
生活中许多问题的解决需要使用到随机数,比如抽奖,为了公平,必须是随机抽取.Scratch软件的"运算"指令组提供了一个可以产生随机数的指令.本篇文章通过制作"幸运抽奖机& ...
- Lemon评测机的使用
Lemon评测机的使用(C++) Part 0 准备: 1.MingW64的安装(Lemon比Cena先进一点,可以使用64位) (注意添加系统函数)2.Lemon 下载 阿里网盘:/(忘了密码)百度 ...
- 【USRP】使用USRP制作超级跑马机(手动滑稽)
0x00 序言 本文作者 Nack'BT ,未经允许,严禁转载 SDR技术交流加我qq 3505932208 估计点击来的同学都看过使用hackrf制作超级跑马机,文章写得很好,我就想拿USRP弄一 ...
- PYQT5+Matplot制作示波器上位机
PYQT5+Matplot制作示波器上位机 上位机介绍(大家如果需要源码欢迎去下载)[https://download.csdn.net/download/qq_41866091/11226698] ...
- 抓娃娃机c语言程序设计,vue制作抓娃娃机的示例代码
去年为联通制作双十一活动,做四个小游戏:'配对消消乐'.移动拼图.抓娃娃.倒计时. 现在先做来分享一下制作抓娃娃游戏时的经验 先上效果图 游戏规则:在指定时间内抓到上图四张卡片为挑战成功. 现在直接说 ...
最新文章
- php用命令查mysql_phpMySQL命令大全总结
- keras和tensorflow使用 keras.callbacks.TensorBoard 可视化数据
- opengles2.0 帧缓存对象(FBO)
- day38 css的4种引入方式
- Bootstrap开篇理解:
- Cocos2d-x——导入Cocostudio资源
- 运行php web文件路径,php的web路径获取
- MySQL查询GROUP BY日/月/年
- pr电子相册如何制作
- 【Python】 使用 xlwt 保存 excel 文件无效 解决
- 初识等级保护,要点整理
- 英语听力训练常采用的方法
- java 对话框计算器,《Java程序设计》第16周礼拜四:GUI编程及文件对话框的使用 计算器...
- 上传Excel文件进度条原理
- Python requests HTTP验证登录实现流程
- TI的CC2530单片机检测不同类型的方波
- Central Europe Regional Contest 2019 J. Saba1000kg (并查集+根号讨论)
- 计算机无法格式化分区,电脑硬盘无法格式化也无法分区怎么办?
- Elasticsearch之批量处理。
- 35岁程序员:从焦虑到适应
热门文章
- 一阶微分方程的物理意义_薛定谔方程的物理意义
- html画表盘 随时间转动,Html5画钟表盘/指针实时跳动
- 42表盘直径是从哪测量_表盘直径怎么算,怎样测量手表表盘的直径
- vue-awsome-swiper 使用跳坑
- 当心真爱掉入“伪爱”漩涡
- 计算机的基本组成和工作原理
- 关于 Could not find artifact ...:pom:1.0-SNAPSHOT 的问题!
- Postman如何设置为中文
- 计算机网研究课题,中学生计算机类课题研究范例
- 2022年数字IC设计提前批笔试面试全流程分享(前期海投,后期顺利拿到Offer)