Сборка отчёта на 200 тысяч строк идёт минуты вместо секунд
Выгрузка собирается так:
report = ""
for row in rows: # rows — около 200 000 строк
report += ";".join(row) + "\n"
Замена на "\n".join(";".join(row) for row in rows) ускорила сборку в десятки раз. Почему?
- Строка неизменяема: каждое += копирует весь накопленный текст заново
- join выполнен на C, а цикл на Python — отсюда постоянная разница примерно в 10%
- При += строка каждый раз перекодируется из UTF-8 и обратно
- Дело не в коде: время уходит на запись результата в файл, а не на сборку
