Как улучшить эффективность с точки зрения времени парсера журнала, который анализирует другой файл - PullRequest
0 голосов
/ 24 апреля 2019

Я создал анализатор журналов в python для анализа данных журналов и их структурирования и сохранения результатов в csv.У меня есть 5 ГБ данных со мной в разных файлах.Я успешно могу проанализировать данные, но время, затрачиваемое на выполнение задания, больше для его улучшения. Я использую многопроцессорную обработку в качестве опции, но эффективность все же значительно не повышается.Что я могу сделать, чтобы эффективно анализировать эти большие данные и сократить время синтаксического анализа.

Вложение кода для того же самого.

import glob
import errno
import re
import pandas as pd
import concurrent.futures


log_pattern = regex expression
log_dict = []

def parse_file(name):
    try:
        with open(name, "r", encoding= "utf-8") as f:
            for line in f:
                match = log_pattern.match(line)
                if not match:
                    continue
                grps = match.groups()
                log_dict.append({"date": grps[0], "timestamp": grps[1] , "type": grps[2], "text": grps[3]})

                df = pd.DataFrame(log_dict)
                df.to_csv("temp.csv")
                #return df
            #f.close()
    except IOError as exc:
        if exc.errno != errno.EISDIR:
            raise
        return 0


#Create a pool of process. By default one is created for each CPU in your machine
def main():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        files = glob.glob(*.log)

        for file, name in zip(files, executor.map(parse_file, files)):
            print(file, name)

if __name__ == '__main__':
    main()
...