Exemple #1
0
 async def do_record(self):
     self.tag = self.request.pop('tag')
     self.type = self.request.pop('type')
     self.domain_id = self.request.pop('domain_id')
     self.pid = self.request.pop('pid')
     self.rid = self.request.pop('rid')
     self.lang = self.request.pop('lang')
     self.code = self.request.pop('code')
     try:
         if self.type == 0:
             await self.do_submission()
         elif self.type == 1:
             await self.do_pretest()
         else:
             raise Exception('Unsupported type: {}'.format(self.type))
     except CompileError:
         self.end(status=STATUS_COMPILE_ERROR,
                  score=0,
                  time_ms=0,
                  memory_kb=0)
     except ClientError:
         raise
     except Exception as e:
         logger.exception(e)
         await self.next(judge_text=repr(e))
         await self.end(status=STATUS_SYSTEM_ERROR,
                        score=0,
                        time_ms=0,
                        memory_kb=0)
Exemple #2
0
 async def handle(self):
     try:
         event = self.request.pop('event', None)
         if event:
             if event == 'problem_data_change':
                 await self.update_problem_data()
             else:
                 raise SystemError('Unknown event: {}'.format(event))
         else:
             type = self.request.pop('type')
             if type == 0:
                 await self.submission()
             elif type == 1:
                 await self.pretest()
             else:
                 raise SystemError('Unsupported type: {}'.format(type))
         for key in self.request:
             logger.warning('Unused key in judge request: %s', key)
     except CompileError as e:
         self.end(status=STATUS_COMPILE_ERROR,
                  score=0,
                  time_ms=0,
                  memory_kb=0)
     except Exception as e:
         logger.exception(e)
         self.next(compiler_text=repr(e))
         self.end(status=STATUS_SYSTEM_ERROR,
                  score=0,
                  time_ms=0,
                  memory_kb=0)
Exemple #3
0
 async def worker():
     try:
         while True:
             request = await queue.get()
             await handler_type(self, request, ws).handle()
     except CancelledError:
         raise
     except Exception as e:
         logger.exception(e)
         await ws.close()
Exemple #4
0
async def daemon():
    async with VJ4Session(config['server_url']) as session:
        while True:
            try:
                await session.login_if_needed(config['uname'],
                                              config['password'])
                await update_problem_data(session)
                await session.judge_consume(JudgeHandler)
            except Exception as e:
                logger.exception(e)
            logger.info('Retrying after %d seconds', RETRY_DELAY_SEC)
            await sleep(RETRY_DELAY_SEC)
Exemple #5
0
async def daemon():
    try_init_cgroup()

    async with VJ4Session(config['server_url']) as session:
        while True:
            try:
                await session.login_if_needed(config['uname'], config['password'])
                done, pending = await wait([do_judge(session), do_noop(session)],
                                           return_when=FIRST_COMPLETED)
                for task in pending:
                    task.cancel()
                await gather(*done)
            except Exception as e:
                logger.exception(e)
            logger.info('Retrying after %d seconds', RETRY_DELAY_SEC)
            await sleep(RETRY_DELAY_SEC)
Exemple #6
0
    async def do_record(self):
        self.tag = self.request.pop('tag')
        self.type = self.request.pop('type')
        self.domain_id = self.request.pop('domain_id')
        self.pid = self.request.pop('pid')
        self.rid = self.request.pop('rid')
        self.lang = self.request.pop('lang')
        self.code_type = self.request.pop('code_type')
        self.judge_category = self.request.pop('judge_category')
        self.judge_category = self.judge_category and self.judge_category.split(
            ',') or []
        if self.code_type == CODE_TYPE_TEXT:
            self.code = self.request.pop('code').encode()
        else:
            self.code = path.join(mkdtemp(prefix='jd4.code.'))
            await self.session.record_code_data(self.rid,
                                                path.join(self.code, 'code'))
            logger.info('code dir: %s', self.code)

        # TODO(tc-imba) pretest not supported

        try:
            await self.prepare()
            if self.type == 0:
                await self.do_submission()
            elif self.type == 1:
                await self.do_pretest()
            else:
                raise Exception('Unsupported type: {}'.format(self.type))
        except CompileError:
            self.end(status=STATUS_COMPILE_ERROR,
                     score=0,
                     time_ms=0,
                     memory_kb=0)
        except ClientError:
            raise
        except Exception as e:
            logger.exception(e)
            self.next(judge_text=repr(e))
            self.end(status=STATUS_SYSTEM_ERROR,
                     score=0,
                     time_ms=0,
                     memory_kb=0)
Exemple #7
0
async def daemon():
    # 尝试初始化cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。
    try_init_cgroup()

    # 创建异步回话连接jv4服务端
    # config['server_url'] 获取配置文件数据
    async with VJ4Session(config['server_url']) as session:
        while True:
            try:
                # 登陆JV4服务器
                await session.login_if_needed(config['uname'], config['password'])
                # 运行两个协程
                done, pending = await wait([do_judge(session), do_noop(session)],
                                           return_when=FIRST_COMPLETED)
                for task in pending:
                    task.cancel()
                await gather(*done)
            except Exception as e:
                logger.exception(e)
            # 打印等待log
            logger.info('Retrying after %d seconds', RETRY_DELAY_SEC)
            # 等待30秒
            await sleep(RETRY_DELAY_SEC)