Python: улучшить производительность при записи логов в файл - PullRequest
0 голосов
/ 20 декабря 2018

Я пишу фрагмент кода, который включает генерацию новых значений параметров в двойном цикле FOR и сохранение этих значений в файле.Счетчик итераций цикла может достигать 10000 * 100000.Я сохранил значения переменных в строке, которая добавляется на каждой итерации с новыми значениями.Наконец, в конце цикла я записываю полную строку в текстовый файл.

op=open("output file path","w+")
totresult = ""
for n seconds: #this user input parameter can be upto 100,000
    result = ""
    for car in (cars running): #number of cars can be 10000
        #Code to check if given car is in range to another car
        .
        .
        #if car in range with another car 
        if distance < 1000:
            result = getDetailsofOtherCar()
            totresult = totalresult + carName + result
#end of loops
op.write(totresult)
op.close()

Мой вопрос здесь заключается в том, есть ли лучший питонный способ для ведения такого рода журналирования.Как я предполагаю, строка становится очень громоздкой на более поздних итерациях и может вызывать задержку выполнения.Является ли использование строки лучшим вариантом для хранения значений.Или я должен рассмотреть другие структуры данных Python, как список, массив.Я наткнулся на модуль Python Logging, но хотел бы узнать мнение, прежде чем переключиться на него.

Я попытался найти похожие проблемы, но не нашел ничего похожего на мои нынешние сомнения.

Открыт для любых предложений

Спасибо

Редактировать: код добавлен

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете записывать в файл по ходу работы, например:

with open("output.txt", "w") as log:
    for i in range(10):
        for j in range(10):
            log.write(str((i,j)))

Обновление: скорость или нет прямой потоковой передачи записей быстрее, чем их конкатенация в буфере памяти, в решающей степени зависит от того, насколько большой буфер становится, чтов свою очередь зависит от количества записей и размера каждой записи.На моей машине это примерно 350 МБ.

enter image description here

...