@Mikhail5482

Как ускорить работу Python в разы?

Всех приветсвую!
У меня есть код, который собирает информацию по Api.
Как можно максимально ускорить именно сбор информации?
Речь идет про Binance API. Использую библиотеку python-binance
while True:

        def ticker(ticker1, ticker2, ticker3):

            ticker1 = bot.get_symbol_ticker(symbol=f'{str(ticker1)}', requests_params={'timeout': 0.1})
            ticker1 = float(ticker1['price'])
            ticker2 = bot.get_symbol_ticker(symbol=f'{str(ticker2)}', requests_params={'timeout': 0.1})
            ticker2 = float(ticker2['price'])
            ticker3 = bot.get_symbol_ticker(symbol=f'{str(ticker3)}', requests_params={'timeout': 0.1})
            ticker3 = float(ticker3['price'])
        ticker('USDTBRL', 'SANTOSBRL', 'SANTOSUSDT')

Каждый из них выводит словарь такого типа - {'symbol': 'BTCUSDT', 'price': '19828.08000000'}
Можно ли сделать так, что бы он собирал информацию со всех "ticker" меньше чем за 0.3 секунды?
На данный момент все три "ticker" он собирает за 0.85547 секунд
  • Вопрос задан
  • 288 просмотров
Пригласить эксперта
Ответы на вопрос 3
@deliro
Ну ага мы сейчас такие раз и рецепт тебе сказали, который работает для всех случаев. Если бы он был, его бы логично было запихать прям в интерпретатор, не так ли?

Может быть, asyncio тебе поможет, может быть threading, может быть, там CPU-bound у тебя что-то и надо multiprocessing, а может и вообще на PyPy заменить интерпретатор или часть кода переписать на Cython

А может вообще сервер стоит подвинуть ближе к серверу API чтобы пинг уменьшить. Или лимиты как-то повысить, используя прокси, несколько аккаунтов или заплатив за API.

Ну или просто код говно:)

Нам откуда знать профиль твоей нагрузки? Вариантов тысячи.
Ответ написан
Vindicar
@Vindicar
RTFM!
Ты документацию читал?
get_symbol_ticker(**params)[source]
Latest price for a symbol or symbols.

Выделение моё. Судя по докам, get_symbol_ticker() позволяет за один запрос получать инфу сразу о нескольких символах. Готов спорить, что это будет быстрее.

Так как в заголовке функции **params вместо нормального описания параметров, я подозреваю, что переданные параметры пробрасываются прямиком в API binance. Открываем доки на это API, благо ссылка есть прямо в первых доках. Видимо, что можно в параметрах передать строку symbol, или строку-список symbols вида
["BTCUSDT","BNBUSDT"]. Как я понял, это именно строка такого вида, а не список.

Вот скажи мне, что тебе помешало найти эту информацию самостоятельно? Две минуты гуглежа, и это при том что я с бинансом не работал вообще.

Ну и да, серьёзно? f'{str(ticker1)}', притом что ticker1 - это уже заведомо строка? Больше строк богу строк...
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Сменить питон на С/С++/Rust/GO/любой быстрый нативный ЯП. Ну или вообще сразу ассемблер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы