def escalonar(self, fregues): self.servidor.ocupar() self.requisicoes_atendidas += 1 tempo_para_termino = self.distribuicao.sample() fregues.finalizar(tempo_para_termino + current_time()) self.__update_tempo_medio_atendendo(fregues) return tempo_para_termino + current_time()
def run(self): for repeticao in xrange(self.qnt_repeticoes): servidor = Servidor() escalonador = Escalonador(self.tempo_medio_servico, servidor) self.requisicoes_recebidas = 0 self.tempo_inicio = current_time() proxima_chegada = int(current_time() + self.distribuicao.sample()) proximo_termino = 0 while (not self.fim_execucao(self.tempo_inicio)): if (current_time() >= proximo_termino): servidor.liberar() if (servidor.is_livre()): if (not escalonador.is_fila_vazia()): proximo_termino = int( escalonador.atender_fregues_em_fila()) elif (self.chegou_fregues(proxima_chegada)): fregues = Fregues() proxima_chegada = int(current_time() + self.distribuicao.sample()) proximo_termino = int(escalonador.escalonar(fregues)) else: if (self.chegou_fregues(proxima_chegada)): fregues = Fregues() escalonador.enfileirar(fregues) escalonador.update_qnt_media_elems_na_fila(self.get_momento()) time.sleep(0.9) write_results(self.tipo_distribuicao_chegada, self.params_distribuicao, self.tempo_medio_servico, self.duracao_simulacao, self.requisicoes_recebidas, escalonador.get_qnt_requisicoes_atendidas(), escalonador.get_tempo_medio_atendendo(), escalonador.get_qnt_media_elems_na_fila())
def get_momento(self): return current_time() - self.tempo_inicio
def chegou_fregues(self, proxima_chegada): if current_time() >= proxima_chegada: self.requisicoes_recebidas += 1 return True return False
def fim_execucao(self, tempo_inicio): delta = current_time() - self.tempo_inicio return delta > self.duracao_simulacao
def __init__(self): self.chegada = current_time() self.termino = -1