def put_task_into_queue(): '''扫描数据库,将任务添加到队列''' log.log_info('Scaning DB...') while True: init.queue.join() # 阻塞程序 sql = 'SELECT submission_id FROM ' + config.db_table_name + ' WHERE status = ' + status.QUEUING + ';' data = db.run_sql(sql) num = len(data) if num > 0: log.log_info('%d submission(s) coming...' % num) for i in range(num): time.sleep(1) submission_id = data[i][0] init.dblock.acquire() ret = get_data.get_code(submission_id) and get_data.get_input(submission_id) init.dblock.release() if ret == False: init.dblock.acquire() update.update_status(submission_id, status.GET_DATA_ERROR) init.dblock.release() continue inner_sql = 'SELECT language, time, memory FROM ' + config.db_table_name + ' WHERE submission_id = ' + str(submission_id) + ';' #print inner_sql inner_data = db.run_sql(inner_sql) language_id = inner_data[i][0] Time = inner_data[i][1] memory = inner_data[i][2] task = { 'submission_id': submission_id, 'language_id': language_id, 'time': Time, 'memory': memory } init.queue.put(task) time.sleep(1)
def before_run(submission_id, time, memory, language_id): secure.low_level() '''获取程序执行时间和内存''' if secure.check_dangerous_code(submission_id, language_id) is False: update.update_status(submission_id, status.DANGEROUS_CODE) log.log_error('Has DANGEROUS code, %d' % submission_id) return False update.update_status(submission_id, status.COMPILEING) compile_result = compiler.compile(submission_id, language_id) if compile_result is False: # 编译错误 update.update_status(submission_id, status.COMPILATION_ERROR) log.log_error('Compile failed, %d' % submission_id) return False log.log_info('Compile completed, %d' % submission_id) result = run( solution_id, time_limit, mem_limit, program_info, language_id) return result