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)
Example #2
0
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