Ответы пользователя по тегу Python
  • Не опасно ли делать бесконечный while?

    @rPman
    Абсолютно все приложения, если это не простенькая консольная утилита, в которой нет модели обработки событий, представляют из себя бесконечный цикл, в котором по очереди обрабатываются события и стоит метод ожидания следующего.

    так что сам по себе бесконечный цикл не опасен
    но совершив ошибки при его написании можно хорошенько наступить себе на ногу
    Ответ написан
    Комментировать
  • Не знаю как это назвать?

    @rPman
    твой метод client.post_order?
    если да то переделай его так чтобы он принимал массив (все равно все методы, отсылающие на сервер запросы так и делают), тогда простыми проверками на пустые значения собираешь свой post
    Ответ написан
    3 комментария
  • Как реализовать что б при нажатии кнопки клавиатуры в телеграм боте у вас открывался чат с человеком?

    @rPman
    такого функционала у клиентов телеграм нет
    единственный способ открыть чат - написать сообщение
    Ответ написан
    Комментировать
  • Как каждые 24 часа добавлять монеты на баланс?

    @rPman
    Понятно что автор не удосужился просто понять код который привел сам, в нем нужно поправить sql запрос
    UPDATE `users` SET `balance` = `balance` + ? WHERE `user_id` = ?

    И настроить периодический вызов метода addBalance

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

    Поэтому, в базе данных должны храниться все операции, а итоговый баланс должен считаться тригерами на основе этих данных (только не советую тригером каждый раз считать сумму всех операций, нужно хранить баланс, дату обновления и суммировать новые сделки с ним)
    Ответ написан
    Комментировать
  • Обработка видео на пайтон. Соединить фото в видео. Как сделать?

    @rPman
    Наверное лучший комбайн для обработки и кодирования видео - это ffmpeg, полноценных биндингов для питон нет (есть прослойки, вызывающие exe файл) типа таких, все остальные способы потребуют заметных усилий чтобы к примеру завести аппаратное ускорение на основе gpu или поддержать какой-нибудь экзотический контейнер или кодек.

    Т.е. если ты ограничишь задачу определенными кодеком и контейнером, то думаю можно будет найти другой инструмент, но скорее всего это будет не python

    p.s. чтобы реализовать увеличение fps видео, построенное на основе меньшего количества кадров, путем генерации новых изображений из соседних, нужно использовать технологии под названием
    "motion interpolation" или "optical flow", в ffmpeg для этого есть фильтр ​minterpolate
    Ответ написан
    Комментировать
  • Как раз в 15 минут обновлять значения в бд?

    @rPman
    Мне кажется ты ошибаешься с логикой и тебе надо не раз в 15 минут это делать, а то что будет если твое событие произойдет за секунду до окончания этого 15-минутного интервала? Т.е. на исполнение задачи (которую ты отменяешь) у тебя будет не 15 минут а секунда.

    Если тебе надо отсчитывать некоторое время с момента события, то нужно в базе хранить начало момента времени с которого начинается отсчет, тогда условие окончания интервала будет now-start_time>длительность_интервала, сделай такое поле finished вычисляемым в view или сразу в твоем запросе.

    Таких полей можно сделать несколько
    Ответ написан
    Комментировать
  • Как можно ускорить процесс записи csv в json?

    @rPman
    Ты запрашиваешь список ссылок на csv файлоы веб запросом, затем загружаешь по одной ссылке с сайта (самое долгое имхо) и для каждого формируешь массив (всего лишь двухмерный, т.е. твой json плоский), фильтруя записи по одному полю, плюс декодируя данные из utf-8 во внутреннее представление python (unicode) и обратно при сохранении, что медленнее чем работать с байтами.

    Т.е. что я бы сделал - либо используя асинхронщину либо (так просто проще закодить) двумя независимыми потоками или процессами, первый загружал бы данные (возможно сразу несколькими запросами, но если там один физический сайт-источник то это может не ускорить загрузку) и складывал бы их в файлы, а второй ждал бы не обработанные файлы (пока файл загружается и сохраняется на диск, его имя должно быть с пометкой о том что файл не готов, а по окончанию переименовывается), и обрабатывал бы их как поток байт (единственное место где нужно декодирование - это поиск подстроки-фильтре но помятуя про utf-8 в данном конкретном случае можно обойтись простым побайтовым поиском). Мало того, даже не надо заниматься кодированием json, просто выводи его print-ом, подставляя где надо имена полей и ковычки, нет нужды промежуточно сохранять это в массиве - прочитал csv строку и тут же ее сохранил в json, если принимающий понимает utf-8 (а сейчас все они понимают), т.е. нет нужды подменять символы на длиннющую конструкцию \uXXXX, максимум экранирование ковычек " и \ (то же самое с чтением csv),.. но прежде чем переписывать эту часть кода, достаточно хотя бы просто оптимизировать загрузку файлов, вполне возможно что 99% тормозов там
    Ответ написан
  • Какой вариант просмотра баланса BTC кошелька лучше?

    @rPman
    Можно использовать публичные сервера electrum, но если нужна массовый анализ то собирай данные сам, используя официальный кошелек и скрипта анализа.

    Самое простое, однократно запросить дамп utxo, а затем на каждый блок собирать информацию по транзакциям и обновлять балансы у себя в базе
    Ответ написан
    1 комментарий
  • Почему перестал компилироваться exeшник в Pyinstaller?

    @rPman
    3579 INFO: Appending archive to EXE C:\Users\sergey\desktop\dist\stars.exe
    3591 INFO: Building EXE from EXE-00.toc completed successfully.
    в конце оно пишет что все ок собралось, может не там ищешь exe?
    Ответ написан
  • Почему возникает ошибка при запуске файла exe Python через excel?

    @rPman
    Твой скрипт на питоне умеет запускаться с любым текущим каталогом?

    Может в коде запуска не указан текущий каталог, и используется тот, что последним использовался в excel (когда вызывается диалог открытия файла на сколько я знаю меняется текущий каталог)?

    Установи его перед вызовом с помощью WScriptShell.CurrentDirectory = "....."
    Ответ написан
    8 комментариев
  • Чтение excel файла в облаке?

    @rPman
    По твоей ссылке не выдается excel файл, а html страничка с авторизацией.

    Дропбокс и другие облачные файлохранилки с бесплатными лимитами не дают прямой доступ к файлу, там все равно нужна авторизация (так как иначе с помощью простых прослоек их начинают безжалостно эксплуатировать, с регистрацией 100500 аккаунтов)

    p.s. ищи webdav доступ к файлам, на сколько я знаю у того же яндекс он есть
    еще лучше - используй amazon s3 или аналоги
    ну или идеальней (дешевле) всего, подними свой сервер и раздавай по своим протоколам и правилам
    Ответ написан
    Комментировать
  • Могу ли я загружать файлы на торрент с помощью Python?

    @rPman
    python биндинги для libtorrent идут в поставке почти с любой современной linux, например в ubuntu - python3-libtorrent, так же есть в pipy (для установки через pip)

    первый же пример из гугла
    Ответ написан
    Комментировать
  • Стоит отправлять запросы с ssl в Binance?

    @rPman
    Если отключаешь ssl контроль, значит допускаешь возможность атаки mitm (провайдер или публичный wifi), но так как api binance содержит дополнительное поле с цифровой подписью на основе секретного ключа, навредить тут возможности не будет (при подмене запроса binance его не примет и выдаст ошибку), максимум подсмотреть, какие операции выполняются
    Ответ написан
    Комментировать
  • Как сделать одну функцию для всех классов?

    @rPman
    Я не буду сейчас про конкретный пример говорить, и скажу в общем
    одну и туже функцию, но с небольшим отличием

    универсальное решение - метапрограммирование

    Это часто считается говнокодингом, в других языках типа c++ или c# есть препроцессор, простой язык шаблонизатор, игнорирующий частично или полностью синтаксические особенности базового языка

    Код функции разбивается на части, подобные в разных экземплярах этих функций, а различия вносятся через параметры функций препроцессора.

    В данном случае различия в имени класса, в прокси-вызове super и строки определяющей published_on, соответственно все остальное в функции можно определить в макросе препроцессора и сгенерировать код нужное количество раз, вызвав этот макрос.

    Лично я когда мне нужно в метапрограммирование, (использую не смейтесь php) добавив вызов своей утилиты в сборку , но ничто не мешает взять готовое, первый же гуглеж выдает filepp или gpp (сишный синтаксис макросов)

    недостатки подхода - исходные файлы до макро могут не поддерживаться IDE и редакторами, сломанный контроль синтаксиса и сложнопонятные сообщения об ошибках могут отпугнуть
    Ответ написан
    Комментировать
  • Как сделать что-то если наступил следующий день/неделя/месяц/год на Python?

    @rPman
    добавь к текущей дате сутки (затем возьми и получившейся даты день месяца и сравни с текущим днем месяца, если они равны, то добавь еще одну секунду, это для обслуживания лишних секунд), затем создай новую дату из дня месяца и года получившейся переменной, получишь время требуемого события.

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

    Не советую использовать один большой слип, надо бы такой протестировать на граничных ситуациях (в момент корректировки времени на машине от сервера времени), а раздели интервал на несколько, чем больше время ожидания, тем больше должен быть слип, а когда останется несколько секунд, то слипы можно сделать короткими (чем ближе к нужному моменту тем короче ожидание, это определит погрешность срабатывания)
    Ответ написан
    Комментировать
  • Откуда получать графики криптовалют в виде картинки?

    @rPman
    Все биржи криптовалют предоставляют публичный api (если какая то не предоставляет, значит это не биржа а просто обменник или скам), но почти все сильно лимитируют получение исторических данных, поэтому либо сам дособирай несколькими запросами под нужные интервалы либо ищи архивные.

    например https://www.binance.com/dapi/v1/continuousKlines?p... вернет json, массив в формате массив массивов, параметр interval задает шаг элемента (1h это часовые котировки например), подробнее формат

    по нему строй график например plotly
    Ответ написан
    1 комментарий
  • Как контролировать двух телеграм ботов одним Python процессом?

    @rPman
    Покопался в исходниках
    в них все что нужно подготовлено для нормальной асинхронщины, но собственно главный метод обработки не вывернут на изнанку, чтобы можно было сделать что то типа:
    bot1 = telebot.AsyncTeleBot(API_TOKEN1, threaded=False)
    bot2 = telebot.AsyncTeleBot(API_TOKEN2, threaded=False)
    ...
    loop = asyncio.get_event_loop()
    loop.create_task(bot1.pooling_step())
    loop.create_task(bot2.pooling_step())
    loop.run_forever()

    смотри код метода _process_polling, и создай свой pooling_step только в нем должно быть только что что в оригинальном внутри цикла while, что то типа
    if updates:
                        self.offset = updates[-1].update_id + 1
                        self._loop_create_task(self.process_new_updates(updates)) # Seperate task for processing updates
                    if interval: await asyncio.sleep(interval)

    непонятно почему создатели библиотеки это не сделали сами, возможно еще не успели или я не правильно понял их код?
    Ответ написан
    Комментировать
  • Как сильно нагрузить интернет сеть?

    @rPman
    Нужно определиться, до куда именно нужно грузить сеть, так как предельные значения нагрузки и результат могут от этого сильно зависеть. Например если загружать только локальную сеть, не затрагивая даже роутер (точнее его фаервол и NAT) то может потребоваться передавать много данных
    Если работать с сервером сразу за роутером (например в датацентре провайдера интернета), то можно легко перегрузить свое оборудование - свой роутер (пинги упадут или даже связь нарушится), но при этом никак не затронуть инфраструктуру провайдера.
    И наиболее точно - разместить сервер, до которого будет идти подключения, прямо у провайдера, где размещена игра, вырожденный случай, возможно хватит у промежуточного провайдера.

    Еще, есть 2 направления нагрузки в зависимости от выбора можно получить желаемый результат или нет
    1. нагрузка на ширину канала, начинаешь прием и передачу большого объема данных, в правильно настроенных сетях провайдера это может даже не повлиять на работу игр, чей трафик может быть выделен и приоритизирован.
    2. нагрузка на процессор промежуточных машин и его алгоритмы QOS, открываешь большое количество соединений, шлешь данные, маленькими порциями но часто и много, точнее можно даже непрерывно открывать их и закрывать. Самый легкий способ подвесить свой роутер.

    p.s. за такой ddos провайдер по головке не погладит, в договоре кстати про это могут быть соответствующие пункты, сначала твою машину просто отключат от сети до выяснения, потом могут и наказать.

    p.p.s. на практике, самое простое - запустить загрузку торент файла по больше, в настройках соединений торент указать побольше, 200-300, но некоторые современные провайдеры детектируют такую нагрузку и обнуляют ее
    Ответ написан
    Комментировать