gpt4 book ai didi

ruby-on-rails - 如何从 Ruby on Rails Web 服务器编译和编码,限制 CPU 和内存使用?

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:36 25 4
gpt4 key购买 nike

我有一个用户提交的 cpp 代码。我的数据库中也有输入和输出文件。如何在我拥有的输入和输出文件上编译和运行此 cpp 代码。

此外,如何限制上述代码运行的运行时间和内存消耗。另外,我如何测量正在使用的内存量以及执行上述代码所花费的时间。

编辑我在下面的破解工作中得到了这个。现在唯一的问题是如何限制正在运行的程序的内存使用。如果它独立于操作系统,我将不胜感激。但是,如果它不可能同时适用于 Windows 和 Linux,欢迎使用解决方案。

需要'超时'

    runDir = 'run\\'

def code_file( sid )
return "#{sid}.cpp"
end

def executable_file( sid )
return "#{sid}.exe"
end

def input_file( sid )
return "#{sid}.in"
end

def output_file( sid )
return "#{sid}.out"
end

def get_complie_command_line( sid , runDir)
return "g++ -w -O2 #{code_file(sid)} -o #{runDir}#{executable_file(sid)}"
end

def get_run_command_line( sid , runDir )
return "#{runDir}#{executable_file(sid)} < #{sid}.in"
end

def run_submission( sid , runDir )
begin
timeout(5) {
run_cmd_line = get_run_command_line( 1 , runDir)
puts run_cmd_line
runOutput = %x[#{run_cmd_line}]
puts runOutput
}
puts "Timeout didn't occur"
rescue Timeout::Error
puts "Timed out!"
end
end

def compile( sid , runDir )
#make the directory
%x[mkdir #{runDir}]

#get compile command line and produce the exe
cmd_line = get_complie_command_line( 1 , runDir)
puts cmd_line
compile_error = %x[#{cmd_line}].to_s.strip

#run the code
if compile_error.length != 0
puts "Compile Errors"
else
run_submission( 1 , runDir )
end
end



compile( 1 , runDir)

最佳答案

您可以使用您的 ruby​​ 代码创建一些run 脚本,如果您使用的是 *nix 类操作系统,请说 run.sh。这个脚本的上下文将是这样的:

#!/bin/bash
/path/to/timeout /path/to/your/compiled/cpp/program < /your/stdin > /your/stdout

其中超时程序就是这个perl脚本https://github.com/pshved/timeout如果它违反时间或内存限制,它将终止您的程序。在 ruby​​ 中,您只需执行 run.sh 脚本 (run.sh) 或类似的脚本。对于 Windows,您可以使用相同的方法

关于ruby-on-rails - 如何从 Ruby on Rails Web 服务器编译和编码,限制 CPU 和内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com