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()
Beispiel #2
0
    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())
Beispiel #3
0
 def get_momento(self):
     return current_time() - self.tempo_inicio
Beispiel #4
0
 def chegou_fregues(self, proxima_chegada):
     if current_time() >= proxima_chegada:
         self.requisicoes_recebidas += 1
         return True
     return False
Beispiel #5
0
 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