Использовать Python или искать более подходящий инструмент?
Есть тяжелый скрипт на питоне, который по расписанию автоматом выполняет манипуляции над данными и отдает результат API. Проблема в том, что скрипт пожирает много ресурсов, использует кучу сторонних библиотек.
В общем в чем сабж - хочу его оптимизировать. Есть 2 пути - рыть в глубины питона, оптимизировать код, думать как правильно управлять зависимостями или переписать на чем нибудь более специализированном типа SCALA или GO.
Вот нужен совет общества
С такими исходными данными никакого совета дать невозможно. Нужно знать хотя бы, что делает скрипт, какие ресурсы «пожирает», в чем сложность оптимизации.
Куча сторонних библиотек - это не недостаток, это преимущество. Я давно уже исходя из своего опыта понял, что публичные библиотеки лучше. Как правило лучше написаны, лучше поддерживаются. Свои велосипеды практически всегда хуже написаны, по ряду причин - чаще всего потому что их пишут новички, которые не знают и не умеют находить готовые решения, и велосипеды приходится поддерживать самостоятельно, что отнимает много сил и времени.
Вы бы хоть написали примерно что за данные и какого рода операции над ними делают.
Может быть надо их просто запихнуть в реляционную БД и написать несколько запросов.
Или наоборот, подойдет переписывание на каком-то map-reduce движке.
Куча сторонних библиотек - это не недостаток, это преимущество
Если посмотреть в исходники библиотек, можно найти огромное количество говнокода. Например, в том же aiohttp конкатенация строк осуществляется в виде "s1" + "s2" + "s3" +"s4" (четыре строки через плюс) вместо ''.join(), что никак не способствует быстродействию.
Andrey Dugin, Возможно, что эта конкатенация осуществляется в том месте, где она совершенно не влияет на производительность. И идеальных решений нет. Все писать с нуля — тоже утопия — пока таким образом закончишь писать идеальное решение, оно уже никому не будет нужно.
Евгений, производительность тут важна, но в данном случае яхочу сказать о другом. Есть pythonic-паттерны, и есть плохой код. Нет ничего сложного сразу написать ''.join(s1, s2, s3, s4). Для этого просто надо знать язык.
Andrey Dugin, Если конкатенация выполняется не в цикле, или любом другом критическом куске кода, то в ней нет ничего плохого. Более того, код с "+" даже нагляднее.
Подобные вещи можно найти в любой библиотеке на любом языке. Нельзя написать библиотеку, в которой совершенно нет узких мест, да и не нужно.
Исходя из вопроса и из рассмотрения обилия библиотек как недостатка - вряд ли проблема в языке программирования. :) Python вполне хорош для всяческих скриптов и обработки данных. Я думаю, что о Scala надо думать, когда система, которую вы хотите сделать, становится настолько огромной и сложной, что без повсеместных internal DSL, систем типов и теории категорий вам с ней не выжить. Так что попробуйте всё же разобраться как следует.
скала конечно может повысить эффективность работы скрипта, НО скорее всего сам по себе язык не решит именно проблемы потребления ограниченных ресурсов. Вам при обработке ваших данных нужно сменить подход, возможно использовать потоковую обработку данных, посмотреть в сторону Спарк, или мапредьюс движков (как уже говорили выше).