diff --git a/test/service/server.py b/test/service/server.py index ffa26d5..ccdcd98 100644 --- a/test/service/server.py +++ b/test/service/server.py @@ -7,7 +7,8 @@ import traceback app = Flask(__name__) -USER_NAME = "yanguangshaonian" +USER_NAME = "ubuntu" +CGROUP_PATH = "/sys/fs/cgroup/rocker" ROCKER_PATH = f"/home/{USER_NAME}/rocker/target/debug/rocker" HANDLER_FILE = "handler.py" HANDLER_CODE = "" @@ -20,7 +21,7 @@ def main(): code = request.json.get("code", "") language = request.json.get("language", "") _id = str(random.randint(8000_0000, 9000_0000)) - resp = {"msg": "", code: "", "id": _id} + resp = {"msg": "", "code": code, "id": _id, "rt": 0.0} if len(code) > 1_0000: resp["msg"] = "代码过长" @@ -34,6 +35,7 @@ def main(): with open(f"{user_path}/{HANDLER_FILE}", "w") as f: f.write(HANDLER_CODE) + starat = time.time() try: _ = subprocess.run(["sudo", ROCKER_PATH, "--id", _id, @@ -46,7 +48,18 @@ def main(): resp["msg"] += f"{traceback.format_exc()}\n" print(e) - time.sleep(3) + # 20s 超时 + procs_path = f"{CGROUP_PATH}/{_id}/cgroup.procs" + for _ in range(2000): + time.sleep(0.01) + try: + with open(procs_path) as f: + procs = [proc for proc in f.read().split("\n") if proc != ""] + if len(procs) == 0: + break + except Exception as e: + break + resp["rt"] = time.time() - starat # 读取文件 try: @@ -61,6 +74,7 @@ def main(): subprocess.run(["sudo", ROCKER_PATH, "--rm", _id]) subprocess.run(["sudo", "rm", "-rf", user_path]) + return resp if __name__ == "__main__":