def start_producer():
    producer = ControlProccess(prod_host="localhost",
                               prod_queue="_QUEUE_PROCCESS",
                               cons_host="localhost",
                               cons_queue="_QUEUE_END",
                               callback=callback_end_control)
    producer.start_producer()

    inicio = datetime.datetime.now()
    files = glob.glob(FILE_PATH)
    for file_name in files:
        mapa_linhas = {"linhas": [], "lote": 0}
        global lote

        with codecs.open(file_name,
                         "r",
                         encoding='iso-8859-1',
                         errors='ignore') as f:
            for ind, linha in enumerate(f.readlines()):
                if ind == 0:
                    continue

                if ind == 1000:
                    break

                # cada elemento em linhas é uma linha do arquivo
                mapa_linhas["linhas"].append(linha)

                # enviando de 500 em 500 a fila
                if (ind + 1) % 500 == 0:
                    lote += 1
                    mapa_linhas["lote"] = lote
                    producer.send_menssage(msg=json.dumps(mapa_linhas))
                    mapa_linhas["linhas"] = [
                    ]  # reinicializando a lista de linhas
            else:
                # garantindo que não fique linhas sem ser enviadas, pois pode ser que no final do processamento de um arquivo
                # mapa_linhas["linhas"] contenha um número menor que 500 linhas
                if mapa_linhas["linhas"]:
                    lote += 1
                    mapa_linhas["lote"] = lote
                    producer.send_menssage(msg=json.dumps(mapa_linhas))
                    #mapa_linhas["linhas"] = []  # reinicializando a lista de linhas

        print("INICIO DO PROCESSAMENTO DE ENVIO: {}".format(inicio))
        print("FIM DO PROCESSAMENTO DE ENVIO: {}".format(
            datetime.datetime.now()))
        print("TOTAL LOTES: %d" % lote)

        producer.stop_producer()
        producer.start_consuming(
        )  # startando o consumidor do produtor para controlar o termino dos processamentos
Ejemplo n.º 2
0
    def __init__(self, prod_host, prod_queue, cons_host, cons_queue, callback, *args, **kwargs):

        self.name = kwargs["name"]

        self.consumer = ControlProccess(prod_host="localhost", prod_queue="_QUEUE_END", cons_host="localhost",
                                        cons_queue="_QUEUE_PROCCESS", callback=callback, name=self.name)