Ответы пользователя по тегу Python
  • Почему 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
    самое простое - забить в программу все возможные варианты и проверять по условию

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

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

    @rPman
    попробуй другую библиотеку python-telegram
    Ответ написан
    Комментировать
  • Каким образом защищенный сайт допускает запросы "живых" пользователей, но блокирует запросы Python Requests и аналогов и как это обойти?

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

    Затем смотришь нужные тебе запросы, они могут требовать (в заголовках или в параметрах) некие данные, которые собственно обфусицированным скриптом сайт и генерирует в 99% случаев это не скрытая строка а напрямую запрашиваемая в предыдущих запросах, т.е. ее можно поискать в par файле (лучше не как текст а разбирай json так как там могут быть строки с ковычками). Вместо ручного анализа может оказаться проще писать небольшой скрипт ковыряющийся в этих логах и доступных html/js файлах сайта.

    По уму отладчик в браузере умеет искать по истории запросов (там где есть поиск по url есть кнопка лупа - поиск, ее нажатие открывает еще одно поле поиска уже по данным)

    Работа с логом очень помогает, но сочувствую тебе.

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

    p.s. для тех кто пишет защиту от парсинга - совет, увеличивайте нагрузку на процессор (в т.ч. используя gpu) чтобы всякие selenium потребовали ну очень много ресурсов (грубо говоря фиктивную задачу как в майнинге либо 100500-уровневая раз дешифрация или хеширование)... подбирая такие нагрузки, чтобы рядовой клиент все еще не замечал проблем а вот массовый анализ стал бы затратным.
    Такова селяви.. либо делай данные общими либо создавай проблемы всем.
    Ответ написан
    Комментировать
  • Как хранить большое количество фото и видео?

    @rPman
    да
    просто работа с файлами достаточно гибкая, могут возникнуть проблемы если со связью до серверов хранения будут нестабильности (смонтированная шара будет подвисать) и по этой причине многие вместо работы с файлами работают по http, расшарив файлы любым внутренним веб сервером как статику.
    php-шникам удобно,
    все файловые методы работают через прослойку, поддерживается http и ftp протокол, можно регистрировать свои (тот же s3 так делает), это значит масштабирование хранения в файлах может пройти практически без правки кода
    Ответ написан
    Комментировать
  • AIOGRAM Как скачать фото от пользователя и дать фото уникальный id?

    @rPman
    хеш от содержимого файла, если база изображений содержит считанные миллионы файлов - то хватит md5, если больше - лучше использовать что то с большим количеством бит какой-нибудь sha512 и соответственно меньшей вероятностью коллизий

    достоинством будет - одинаковые файлы не будут дублироваться в твоем хранилище
    Ответ написан
    Комментировать
  • Как сделать из int str?

    @rPman
    Вот этот список/таблица в которой номеру соответствует строка-описание называется справочник
    У тебя 2 основных подхода, хранить эту таблицу в базе данных (особенно если приложение должно уметь его редактировать) либо хранить его на клиенте и подставлять в программе

    Про хранение на клиенте тебе уже подсказали

    Про хранение в базе данных - либо ты создаешь буквально таблицу-справочник, либо про создании таблицы (твоя profile) определить не числовое поле а enum со строковыми описаниями (подходит для очень небольшого количества записей)

    При использовании таблицы-справочника sql запрос будет примерно таким
    select ... from profile p left join admin_cls a on p.admin=a.id
    Ответ написан
    Комментировать
  • Как создать виртуальный дисплей?

    @rPman
    питон тут однозначно не подойдет

    для windows:
    Без использования драйверов фейкового монитора, но при наличии физических выходов на видеокарте, можно к ним подключить заглушку (она дешевая, разная для каждого типа разъемов, гуглить эмулятор заглушка терминатор монитора dsub/hdmi/dp), благодаря которой система будет считать что монитор подключен, и уже средствами ОС работать с этим монитором (само собой чтобы самому видеть содержимое придется поставить какой-нибудь vnc с поддержкой мультимониторной конфигурации)

    Есть бесплатный враппер (это не кряк а утилита использующая штатный win api), которая превращает рабочие ревизии windows в сервер терминалов (позволяет подключиться mstsc одновременно несколько сессий а не только одну), фокус к сожалению будет убегать но можно сделать каскадные подключения

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

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

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

    так же можно установить несколько xserver, работающих в оперативной памяти - vfb, это будут полноценные рабочие места, работающие исключительно в оперативной памяти (подключение например по vnc)

    и есть xephyr, версия xserver, работающая внутри окна (т.е. буквально выбираешь любое окно, хоть фейковое и говоришь - заменить изображение окна полноценным xserver, мышка и клавиатура будут общими но можно настроить (так делают multiseat на одной видеокарте с несколькими видеовыходами)
    Ответ написан
    Комментировать
  • Как исправить ошибку Non-UTF-8?

    @rPman
    кодировку файла с исходным текстом смени на utf-8
    Ответ написан