Задать вопрос
  • Как правильно организовать наследование?

    Vindicar
    @Vindicar
    Rett-oo, вызывать (длительный) синхронный код из асинхронного и наоборот - муторно. Асинхронность - это не то, что можно "быстренько прикрутить сбоку". Ты или пишешь всю программу асинхронно, или не используешь асинхронность практически нигде. Промежуточные варианты возможны, но всегда доставляют непропорциональное количество хлопот.
    Так что если нужны лимиты на RPS, т.е. троттлинг, то это легко реализуется асинхронно. У меня в ответах даже есть пример реализации. Лучше всё перетащить на асинхрон - или не перетаскивать ничего.
  • Как сделать чтобы я получил информацию о сервере CS2?

    Vindicar
    @Vindicar
    А протокол общения у CS2 и CS:GO одинаковый? Или разный? Если разный, ты уверен, что ты используешь правильный запрос?
  • Flask вывод изображения из базы данных?

    Vindicar
    @Vindicar
    hardux2821, учи flask, читай примеры, думай головой. Суть проблемы я для тебя описал.
    У тебя в шаблоне заявлена переменная encoded_image, а ты передаёшь при рендеринге переменную по имени photo_data. Также, судя по тому, что у тебя просто обращение к /photo работает - ты хранишь в БД файл как есть, в бинарном виде. Но при этом в шаблоне ты ожидаешь, что в переменной будет не бинарное представление, а строка, закодированная в base64.

    Так что возьми содержимое photo_data, закодируй в base64, и результат передай вtemplate.render() под именем encoded_image. Как закодировать - гуглится.

    Или, что я бы сделал, избавься от src="data:" в принципе. У тебя в приложении есть URL, который отдаёт картинку из базы? Ну вот на него и ссылайся в src.
  • Как скомпилировать файл python в exe?

    Vindicar
    @Vindicar
    DmitryNell, ну в случае обычного питона - это именно что подкаталог Scripts. Хотя, зависит от того, как ты его ставил, и как ставил библиотеку. Может лежать в папке профиля пользователя (AppData/Local вроде).
  • Как в название одной переменной внести значение другой переменной?

    Vindicar
    @Vindicar
    1. Для ответов на ответы есть механизм комментариев. Используй его.
    2. А я говорю не про те переменные, которые были созданы раньше. Я говорю про совершенно посторонние. Если ты добавишь к именам префикс, это может помочь - но тебе придётся ОЧЕНЬ тщательно проверять, что никакая твоя переменная не начинается с этого префикса. Например, если у тебя все создаваемые переменные начинаются с "name_", но ты складываешь их имена в список name_list, то скорее всего в этом списке не будет лежать элемент "name_list" - а значит, пользователь сможет переопределить переменную name_list, и тем самым сломать твою логику проверки.
    3. Сфига ли? Ничто не мешает класть в словарь объекты ткинтер.
  • Как асинхронно создать QR код?

    Vindicar
    @Vindicar
    Razraab, ну если очень на пальцах: асинхронная программа на питоне выполняется в одном потоке, от await'а до await'а. Когда попадает на await, текущая корутина приостанавливается, и программа выбирает другую - чей await выполнился, а значит, она готова продолжить выполнение. Вот так и скачет с одного места на другое. При этом обычно await связан с ожиданием операции ввода/вывода, явно или косвенно.

    Прикол в том, что если у тебя длинная синхронная операция, то между двумя await'ами пройдёт много времени - и всё это время программа не сможет переключиться на другие корутины, пусть даже они уже готовы продолжаться. А значит, сетевая программа не сможет реагировать на поступающие данные, пока твоя синхронная операция не закончится.

    Сколько времени будет "слишком много" - зависит от природы системы и нагрузки на неё. Но я бы сказал, что для фан проекта всё, что не очень часто выполняется и требует меньше секунды, можно игнорировать и выполнять синхронно. Вот, скажем, обращение к какому-нибудь сайту делать через синхронный requests не стоит, потому что это потенциально длительная операция. Лучше через асинхронный aiohttp.

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

    А вот если надо сделать что-то длительное, но вычислительно нагруженное - вот тут и пригодится run_in_executor().

    В твоём случае мне кажется, не будет вреда от синхронной генерации кода.
  • Почему не срабатывает проверка python tkinter?

    Vindicar
    @Vindicar
    У тебя какая-то безумная логика тут, разобраться тяжело. И потом, а почему только Йошкар-Оле такая честь? А если на другую, букву, скажем, Я, все города исчерпаны, и кто-то назвал город, заканчивающийся на Я? Что тогда?
    Может, стоит обобщить задачу?
  • Как при закрытии главного окна закрывались все остальные окна?

    Vindicar
    @Vindicar
    PCgames2008, можно и так, да. Если ответ помог - отметь решением, или напиши свой и отметь его.
  • Как принудительно завершить дополнительный поток (thread)?

    Vindicar
    @Vindicar
    gh37pt_chr, профессиональная деформация, ничего не поделаешь. =)
  • Как заставить код работать?

    Vindicar
    @Vindicar
    Ну для начала попробуй передавать аргументы не строкой, а списком, как это сделано в докумнетации.
    ['gta_sa.exe', '-c', '-n', 'NickName', '-h', '51.15.205.209', '-p', '1337']
  • Влияет ли socket.ReceiveBufferSize и socket.SendBufferSize хоть на что-то при использовании UDP?

    Vindicar
    @Vindicar
    По идее да - если размер буфера меньше размера отправляемой/принимаемой датаграммы, то передача/приём потерпят неудачу, так как UDP не позволяет "доделать" недоделанное.
  • Почему при открытии сайта через парсер он не открывается?

    Vindicar
    @Vindicar
    через selenium undetected

    Значит, selenium недостаточно undetected.
  • Как оптимизировать код на Python во времени?

    Vindicar
    @Vindicar
    Maksym122, это лучше в отдельный вопрос - только обязательно вместе со своим кодом, иначе вопрос могут снести как задание.
  • Как оптимизировать код на Python во времени?

    Vindicar
    @Vindicar
    Maksym122, первое, что бросается в глаза: число перестановок.
    Пусть у тебя N=5 возможных цифр, и ты считаешь перестановки по k=3 цифры.
    Тогда число перестановок будет не (N-k-1)!, а N!/k!.

    И второй момент, не пойму, учёл ли ты его: число перестановок для цифр справа от текущей, надо умножать не на текущую цифру - 1. Нужно иметь ввиду, что некоторые значения текущей цифры могут быть уже "заняты" предыдущими цифрами. Упрощённо, если в перестановке первая цифра 1, то вторая цифра может начаться только с 2.
  • Как оптимизировать код на Python во времени?

    Vindicar
    @Vindicar
    Maksym122, отредактируй комментарий, оформи код кнопкой </>. Без отступов код нечитаем же.
  • Как оптимизировать код на Python во времени?

    Vindicar
    @Vindicar
    Непонятные слова можете перевести

    Задайся вопросом: кому нужен ответ на вопрос, нам или тебе?
    Чем выше читаемость вопроса, тем больше шанс получить ответ.
    От такого примечания разит ленью, если честно.
  • Нужна помощь/совет - Telegram бот?

    Vindicar
    @Vindicar
    Что значит "переход на сайты в браузере"?
    Ты же не думаешь, что бот, запущенный невесть где, может вот так просто контролировать браузер на твоей машине?
  • Как правильно настроить считывание клавиш?

    Vindicar
    @Vindicar
    ZeFi, ну тут не так-то просто ответить. Есть решение, которое я бы попытался реализовать, но оно более громоздкое, хотя и более гибкое. Если делать в лоб, как у тебя, то для небольшого числа состояний будет норм, но если состояний будет много, то задолбаешься.
    Почитай про паттерн "Состояние", мне кажется он тут может помочь.
  • Как увеличить паузу между отправкой запроса и получением результата?

    Vindicar
    @Vindicar
    Rozalot, а если в инструменты разработчика в браузере залезть - что там происходит?
  • Как увеличить паузу между отправкой запроса и получением результата?

    Vindicar
    @Vindicar
    Rozalot, тогда на сайте написано что-то странное.
    HTTP протокол устроен не так уж сложно. Клиент отправляет на сервер запрос такого вида:
    GET /урл_который_запрашиваешь HTTP/2.0
    Имя-Заголовка: ЗначениеЗаголовка
    ...  тут может быть много заголовков
    
    После пустой строки идёт тело запроса: данные формы или загружаемый файл, если они есть. Его длина определяется по переданному заголовку Content-Length.

    Когда клиент отправил весь запрос, в том числе тело, он не делает больше ни-че-го. Он сидит и ждёт, пока сервер не отправит ответ. У клиента просто нет механизмов, с помощью которых он мог бы "поторопить" сервер - максимум, что он может, это разорвать соединение по таймауту, не дождавшись ответа.