Различием в поведении с return
является, по моему скромному мнению, наиболее важное различие между 2. Я также предпочитаю лямбду, потому что она меньше вводит, чем Proc.new:-)
Heapy - это профилировщик памяти для Python, который вам нужен.
Самым простым и легким способом, вероятно, было бы использовать встроенные возможности запросов к памяти Python, такие как sys. getsizeof
- просто запустите его на своих объектах, чтобы уменьшить проблему (например, файл меньшего размера) и посмотреть, что занимает много памяти.
В вашем случае ответ, вероятно, очень прост: не читать весь файл сразу, а обрабатывать фрагмент файла фрагментом. Это может быть очень просто или сложно в зависимости от вашего сценария использования. Так, например, вычисление контрольной суммы MD5 может быть выполнено гораздо более эффективно для огромных файлов без чтения всего файла. Последнее изменение резко снизило потребление памяти в некоторых сценариях использования SCons, но его было почти невозможно отследить с помощью профилировщика памяти.
Если вам все еще нужен профилировщик памяти: eliben уже предложил sys.getsizeof. Если это не помогает, попробуйте Heapy или Pympler.
Вы запросили рекомендацию по инструменту:
Python Валидатор памяти позволяет отслеживать использование памяти, места выделения, коллекции сборщика мусора, экземпляры объектов, снимки памяти и т. Д. Вашего приложения Python. Только Windows.
http: //www.softwareverify.com / python / memory / index.html
Заявление об ограничении ответственности: я принимал участие в создании этого программного обеспечения.