Есть ли выигрыш в эффективности от использования скомпилированного C для выполнения операций чтения?
Не совсем. Ограничением будет пропускная способность ввода / вывода, а Python использует базовые библиотеки C.
Если файл поставляется в формате .zip или .gz, следует ли распаковывать весь файл перед чтением и записью или оставить его сжатым и использовать библиотеку, способную читать из сжатого файла?
Во-первых, заставьте все остальное работать хорошо. Не пытайтесь уловить это заранее. Реализация Python ZipFile может обрабатывать файлы формата CSV, открывая элементы ZIP-архива без их расширения.
Это быстрее? Вы не можете знать заранее. Вы можете знать только, построив его и измерив то, что вы построили. Не скручивай руки. Это всего лишь несколько строк кода. Постройте оба.
Должна ли программа использовать многопоточность?
номер
Использовать мульти-обработку на уровне ОС.
python something.py source.zip | python part2.py | python part3.py | python part4.py >result
Это будет удивительно быстро и - без особой работы - будет использовать все доступные ресурсы ОС.
Как можно измерить и сравнить эффективность между различными методами?
Ммм ... Это глупый вопрос. Вы строите это и измеряете это. Прошедшее время является такой же хорошей мерой, как и все остальное. Если вы запутались, используйте секундомер. Шутки в сторону. Там нет магии.
Должна ли программа делать это динамически и выбирать методы ввода-вывода в зависимости от их производительности?
номер
(Будет ли метод A всегда строго доминировать в методе B, или будут иметь значение специфические изменения в среде развертывания)
Да. И да. Некоторые методы всегда более эффективны. Однако ОС адски сложна, поэтому ничто не заменит простого, гибкого, компонентного дизайна.
Создание простых частей, которые можно гибко комбинировать.
Не загибайте руки заранее. Разработайте правильную структуру данных и алгоритм, когда сможете. Когда вы не можете, просто выберите что-нибудь разумное и двигайтесь дальше. Строить что-то и настраивать гораздо проще, чем беспокоиться о деталях, только чтобы понять, что они никогда не имели значения.
Построить что-нибудь.
Measure.
Найдите узкое место.
Оптимизация * только 1064 * проверенные узкие места.