Ответы пользователя по тегу Python
  • Как избавиться от большого количества конструктий if-else?

    @rPman
    Это нормально.
    И да, много это не 2-3 уровня а сотни и тысячи.

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

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

    @rPman
    Все способы хороши, да и тупой while sleep и более умный готовый event loop с асинхронными библиотеками.

    Часто все завязано на способе проверки, если хватит http запроса то да, приложение из 4 строчек сможет решить задачу

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

    p.s. бывает информацию о новых постах можно получать по websocket (сам пост обычно тем же http reast забирают но сайты могут выдавать сообщение клиентам через сокеты), соответственно пилишь клиент вебсокет который вместо периодических опросов будет максимально оперативно принимать сообщение от сервера
    Ответ написан
    Комментировать
  • Как во время цикла отсчитать время в else и отключить программу?

    @rPman
    Тебе нужно засечь момент начала отсчета (это запуск программы и вывод "Неть"?), просто заведи переменную - timeStart им присвой ей текущую дату now, соответственно сравнивай на каждой итерации значение этой переменной с текущим временем и если разница больше требуемой - выполняй свой код (отключение программы? sys.exit() )
    Ответ написан
  • Какова архитектура коммуникации между сервисами?

    @rPman
    работу двух не моих сервисов
    собственно все проблемы тут.

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

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

    Плюс к этому еще мониторинг/уведомление о проблемах, если операция периодическая и совершается в автоматическом режиме, нужно сообщать о не завершенности ответственному лицу максимально оперативно и подробно... фраза - 'произошла ошибка 134' - неправильное сообщение, верное - 'обновление данных о сотрудниках не завершено по причине обнаружении дублирующих значений фио и день рождение Василий Иванович Пересменкин 13.02.00 для разных сотрудников', и в идеале по каждой ошибке предлагать какое то решение.
    Ответ написан
    Комментировать
  • Можно для тг бота в качестве плаТежного сервиса использовать бинанс кошелек?

    @rPman
    да
    используя binance api
    так же у binance есть сервис мерчанта

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

    поэтому, подумай о самостоятельном приеме криптовалют, они для этого и создавались
    Ответ написан
    Комментировать
  • Можно ли отправить игру, которую сам написал (прям код), Телеграм ботам?

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

    Код придется загружать и исполнять в выделенной песочнице с механизмами контроля и ограничения ресурсами (cpu/ram/...). Песочница подразумевает отсутствие функций вызова команд ОС либо их симуляция в той мере чтобы код не смог навредить. И вот тут кроется самая большая проблема - сторонние библиотеки, при отсутствии стандартных функций так же не будут работать как ожидается и их придется как минимум адаптировать к новым реалиям.

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

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

    Полностью защитить локальные данные от получения к ним доступа невозможно, можно только усложнить - увеличить стоимость взлома (например обфускация алгоритмов и ключей шифрования критичных данных) и делать это лучше не на python (инструменты обфускации заточены обычно на c/c++)
    Ответ написан
    Комментировать
  • Почему gRPC сервис при нагрузке выдает 1 RPS, при том что сервис запущен с max_workers=10?

    @rPman
    Совершенно непонятно, как именно отрабатывает асинхронный сервер asyncio с вашим thread pool, я так понимаю это скрывается в дебрях класса объекта test_pb2_grpc? Нужно больше информации.

    если к правильно настроенному 10-поточному серверу попытаться одновременно сделать больше 10 подключений, то все лишние будут откладываться в очередь (длина которой отдельный разговор, но при ее превышении сервер должен возвращать ошибки) и копиться там, т.е. с какой бы скоростью запросы к серверу не шли бы, отрабатывать они должны именно так - 10 запросов, каждый по 1 секунде, т.е. 10 запросов в секунду.

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

    Тут будет что то типа такого - первые 10 запросов (в течении первых 0.2 секунды) запустятся на обработку и завершатся каждый ровно через 1 сек, все последующие тупо будут складываться в очередь, по завершению очередного запроса, т.е. каждый следующий исполненный запрос будет завершаться через 0.02..0.2 секунды,группами, (при условии что запросы равномерны по времени), в порядке отправки этих запросов.

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

    @rPman
    data["date"] = query.message.textты пишешь как текст как он приходит от пользователя
    и да у sqlite нет типа date
    2.2. Date and Time Datatype

    SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

    TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
    REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
    INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.

    Applications can choose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.

    судя по скрину там где ты это смотришь формат даты ожидается иной
    Ответ написан
    4 комментария
  • Что делать, почему ffmpeg не работает?

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

    Приложения на linux устанавливаются с помощью пакетного менеджера, в зависимости от того какая там операционка, для ubuntu это apt (а более низкоуровневая dpkg)

    установить ffmpeg
    sudo apt install ffmpeg
    узнать где он размещен
    whereis ffmpeg
    ffmpeg: /usr/bin/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz

    или спросить пакетный менеджер, какие файлы куда он установил
    dpkg -L ffmpeg
    ...
    /usr/bin/ffmpeg
    /usr/bin/ffplay
    /usr/bin/ffprobe
    ...


    хотя для запуска достаточно будет писать ffmpeg без пути
    Ответ написан
  • Как используя минимум ресурсов, при помощи python, sql и библиотек psycopg2 и pandas составить запрос к базе postgre используя данные dataframe?

    @rPman
    Либо ты загружаешь все себе в память и там ковыряешься либо загружаешь всю или критичную для принятия решения информацию в одну базу (целевую или создав новую) и там ковыряешься

    все остальные варианты - некрасивые

    p.s. судя по коду тебе просто нужно взять идентификаторы из экселя и по ним найти записи в базе, попробуй собрать все идентификаторы в список и сделать огромный select ... where id in (...), кстати можно собирать некоторое их количества и делать блоками по к примеру 1000 записей

    p.p.s. когда народ перестанет делать так и начнет пользоваться именованными параметрами?
    t.id=\'" + str(m_list[i][1]) + '\'
    Ответ написан
    Комментировать
  • Как начать работать с OpenAI gym?

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

    p.s. нейронные сети (основа большинства современного ИИ) - это не про алгоритмы, а про обучающие данные. Собственно собирать эти данные и подготавливать их к виду, которые нужны уже реализованным алгоритмам и есть большая часть работы.
    Ответ написан
    2 комментария
  • Имею базу в формате txt размером 2gb, как отсортировать по количеству символов на строку?

    @rPman
    Для таких операций уже несколько десятилетий в linux существует утилита awk со своим языком программирования (он достаточно простой хоть и странный), так же можно соорудить регулярное выражение и с помощью утилиты sed или grep, несколькими проходами пройти по файлу, и сначала вывести все короткие строки, вторым проходом все длинные.

    так же можно написать приложение на любом языке программирования, построчно читать файл, измерять длину строки или какое тебе нужно условие и записывать в нужный файл, кода строк на 5-6
    Ответ написан
    Комментировать
  • Pool vs ThreadPool или как задействовать все процессоры с максимальной отдачей?

    @rPman
    модели tf
    tensorflow по умолчанию пытается использовать все доступное (и настроенное) оборудование, т.е. если у тебя анализ идет на процессоре, по умолчанию будут задействованы все ядра

    Использование пула скорее всего никакого прироста к скорости не даст (максимум время на подготовку данных к нужному формату)
    Ответ написан
  • Как спарсить подобный сайт?

    @rPman
    Заказчик сказал что все эти действия он проводит вручную через safari на iPhone в течении дня и не получает блокировки аккаунта (или получает но сильно реже).
    скорее всего сайт анализирует статистику действий пользователей, все нетипичные профили переносит в разряд - забанить если через пол часа не прекратит

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

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

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

    @rPman
    Если обе машины за NATом, то можно воспользоваться UPNP (протокол управления роутером из приложений без авторизации) и открыть с его помощью на серверной стороне порт

    Полистай, посмотри картинки.

    Точно помню с помощью udp можно как то выходить за nat (один уровень) без поддержки upnp
    Ответ написан
    Комментировать
  • Как можно определить отправил ли пользователь больше 3-х раз одну и туже команду?

    @rPman
    Если один пользователь нажимая на кнопки может вызвать ddos у бота, то что то не так ты там сделал

    на практике достаточно пользователю ограничить нажатие кнопки чаще чем определенное количество за N секунд, для этого сохраняешь в боте последние нажатия с timestamp их нажатия не больше time()-Nsec, и если количество записей в этом списке больше лимита (например 10) - возвращаешь сообщение - 'я тебе потыкаю, не тыкай мне'
    Ответ написан
    Комментировать
  • Как удалять строку если в файле больше 500 символов?

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

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

    @rPman
    Браузер, консоль разработчика по f12, закладка network, проводишь нужные действия с сайтом, ищешь в списке подключений нужное, нажимаешь правую кнопку - копировать как - curl выбрав нужную версию ОС

    полученная строка повторит запрос браузера с точностью до заголовков.
    Ответ написан
    Комментировать
  • Классификация вопросов?

    @rPman
    самое простое - забить в программу все возможные варианты и проверять по условию

    причем буквально сравнением, удалив из строки с вопросом лишние символы (лишние пробелы, знаки препинания если конечно не дойдешь до фраз типа 'казнить нельзя помиловать' и т.п)

    правильное решение как ни странно существует, но оно не подъемно для задающих такие вопросы
    Ответ написан
    Комментировать