Ответы пользователя по тегу Python
  • Асинхронные функции и цикл событий. RuntimeWarning: coroutine 'Application.initialize' was never awaited?

    2ord
    @2ord
    was never awaited
    означает, что нужно добавить ключевое слово await.
    А, вообще, горячо рекомендую пройти курс по асинхронному программированию в Питоне.
    Ответ написан
    Комментировать
  • Как лучше устроить сервер для мессенджера?

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

    2ord
    @2ord Автор вопроса
    В итоге я написал своей инструмент для автодокументации.
    Как это работает:
    Код парсится в AST при помощи модуля ast. Ходим по узлам я проверяем не является ли функцией, проверяя, нет ли существующей документации функции ast.get_docstring(node).
    Если отсутствует, то получаем тело функции ast.unparse(node) и отправляем запрос LLM с промптом (использовал Codestral), прося подготовить краткое описание назначения функции согласно PEP 257. Полученный ответ вставляется обратно в тело функции в ее узле.

    Из минусов следует отметить, что модуль "ast" отбрасывает комментарии в коде при его парсинге, что потенциально могло добавить некоторые нюансы при генерации docstring.

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

    В качестве оптимизации, чтобы сберечь запросы при дебагинге, воспользовался хранилищем K/V.
    Ответ написан
    Комментировать
  • Python не выходит из цикла while, что делать?

    2ord
    @2ord
    после открытия файла данные считываются лишь одинажды и затем код проверяет в цикле одно и то же:
    while file_data:
    что логично. Ведь данные не изменились.

    Чтобы исправить, нужно изменить на
    while True:
        file_data = client.recv(524288) # или указать размер поменьше
        if not file_data:
            break
        o_file.write(file_data)

    И лучше писать так:
    with open(name_file, 'wb') as o_file:
        while True:
            file_data = client.recv(524288)
            if not file_data:
                break
            o_file.write(file_data)
    
    client.close()
    Ответ написан
  • Как установить пакет Flask для Python 3.8.2, на сервер не имеющий доступ к интернету?

    2ord
    @2ord
    Собери образ Докера на машине с интернетом, посмотри какие зависимости устанавливаются и куда. Собери все файлы и экспортируй в архив TAR.
    Ответ написан
    Комментировать
  • Действительно ли Python 3.11 быстрее Python 3.10?

    2ord
    @2ord
    Версия Питона может быть и скорее, однако на практике это совсем не всегда означает сколько либо значимое ускорение работы программ.
    Ускорение работы зависит от многих факторов. Если это веб-приложение, то зависит от, например, использования прослоек типа ORM и работы с СУБД, а также модели обработки данных.
    Если задачи чисто вычислительные и/или очень плотно используют asyncio, то вполне возможно, что ускорение будет ощутимо. Или некоторые другие, см. https://pyperformance.readthedocs.io/benchmarks.ht...
    Ответ написан
    Комментировать
  • Как можно ускорить загрузку в S3 хранилище?

    2ord
    @2ord
    1. Нужно уточнить какой имеется up канал для загрузки. Он является бутылочным горлышком.
    2. Выбрать S3 в регионе поближе.
    3. Использовать другие способы: можно пробовать закачивать кусками "параллельно", однако при исчерпании ширины канала этот способ может не сильно ускорить.

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

    2ord
    @2ord
    Ответ написан
    Комментировать
  • Почему закрывается приложение GTK?

    2ord
    @2ord
    win = Gtk.ApplicationWindow(application=app)
    что за переменная app?

    Изначально сделал так, заменив кусок
    spoiler
    for label, callback in self.menu_items.items():
                menu_item = Gtk.MenuItem(label)
                menu_item.connect("activate", lambda _: callback())
                self.menu.append(menu_item)
    
            self.menu.show_all()
            self.indicator.set_menu(self.menu)
    
        def open_app(self, _):
            # Add your app's functionality here
            win = Gtk.ApplicationWindow(application=app)
            btn = Gtk.Button(label="Hello, World!")
            btn.connect('clicked', lambda x: win.close())
            win.set_child(btn)
            win.present()
            #print("Opening the app")

    на
    spoiler
    for label, callback in self.menu_items.items():
                menu_item = Gtk.MenuItem(label=label)
                menu_item.connect("activate", callback)
                self.menu.append(menu_item)
    
            self.menu.show_all()
            self.indicator.set_menu(self.menu)
    
            self.application = Gtk.Application()
            self.application.connect('activate', self.on_activate)
            self.application_window = None
    
        def open_app(self, _):
            # Add your app's functionality here
            self.application.register(None)  # Регистрация приложения
            self.application.activate()      # Активация приложения
    
        def on_activate(self, app):
            if not self.application_window:
                self.application_window = Gtk.ApplicationWindow(application=app)
                btn = Gtk.Button(label="Hello, World!")
                btn.connect('clicked', lambda x: self.application_window.close())
                self.application_window.add(btn)
                self.application_window.show_all()
            else:
                self.application_window.present()

    но были другие ошибки в работе, поэтому после их учета стало так:
    spoiler
    for label, callback in self.menu_items.items():
                menu_item = Gtk.MenuItem(label=label)
                menu_item.connect("activate", callback)
                self.menu.append(menu_item)
    
            self.menu.show_all()
            self.indicator.set_menu(self.menu)
    
            self.application = Gtk.Application()
            self.application.connect('activate', self.on_activate)
            self.application_window = None
    
        def open_app(self, _):
            # Add your app's functionality here
            if not self.application_window:
                self.application.register(None)
            self.application.activate()
    
        def on_activate(self, app):
            if not self.application_window:
                self.create_window(app)
            else:
                self.application_window.present()
    
        def create_window(self, app):
            self.application_window = Gtk.ApplicationWindow(application=app)
            self.application_window.set_title("My System Tray App")
            self.application_window.set_default_size(200, 200)
            self.application_window.connect("delete-event", self.on_window_close)
    
            btn = Gtk.Button(label="Hello, World!")
            btn.connect('clicked', lambda x: self.application_window.hide())  # скрываем окно вместо закрытия
            self.application_window.add(btn)
            self.application_window.show_all()
    
        def on_window_close(self, window, event):
            self.application_window = None  # устанавливаем в None для воссоздания окна в следующей активации
            window.destroy()
            return True  # значит, уже обработали событие
    Ответ написан
  • Можно ли использовать Flask для браузерного трафика?

    2ord
    @2ord
    Можно ли использовать Flask для браузерного трафика?

    Перед gunicorn принято ставить какой-нибудь обратный прокси, который примет на себя запросы от быстрых и медленных клиентов.

    Добавлено
    Фласк не предназначен для трафика от браузеров. Похоже, стоит взять Squid.
    Ответ написан
  • Heroku не видит procfile. Как исправить?

    2ord
    @2ord
    Перейди в корень проекта и покажи листинг файлов. Судя по снимку экрана, файлы проекта лежат внутри .venv .
    Если это так, то перенеси файлы проекта оттуда в корень проекта.
    aikobot
      .venv
      Lib (в Линуксе обычно пишут маленькими буквами и, с точки зрения файловой системы, регистр букв имеет значение)
      Scripts (аналогично)
      Procfile
      my_app.py
      requirements.txt
      README.md
      .gitignore


    Плюс убедиться, что файлы попали в Git.
    На стороне Heroku нужно добавить buildpack. В настройках в админке можно убедиться, что присутствует.
    Ответ написан
  • Может ли python конфликтовать с amd?

    2ord
    @2ord
    Может ли python конфликтовать с amd?
    Нет никаких конфликтов.
    AMD на какой архитектуре процессора? x64 или ARM64?
    Питон использует пакеты согласно архитектуре процессора и нужно просто обновить установленные пакеты заново.
    Допустим, всякие PyTorch и прочие используют оптимизации для конкретной архитектуры процессора и поэтому не будет работать при ее смене.

    Добавлено
    Пробовал переустанавливать библиотеки, интерпретаторы, питон.
    Расскажи как
    Ответ написан
  • Как обработать ошибку потери соединения?

    2ord
    @2ord
    Нужно добавить обработку исключения http.client.RemoteDisconnected
    Ответ написан
    Комментировать
  • Парсер получает ответ 403, как исправить?

    2ord
    @2ord
    Просто не надо долбить целевой сервер большим количеством одновременных запросов.
    Проверять в заголовке "Retry-After" и повторять попытку позже когда сервер слишком занят.
    Можно использовать asyncio.Semaphore для ограничения одновременного кол-ва запросов.
    Ответ написан
  • Как часто стоит открывать и закрывать соединение при записи в БД из Kafka?

    2ord
    @2ord
    Просто используй пул соединений к СУБД в своей программе. Тогда открытием и закрытием будет заниматься этот механизм.

    Не закрывать соединение вообще
    это нехороший вариант, по очевидным причинам.
    Ответ написан
    Комментировать
  • Docker-контейнеры для Linux c GUI на PyQt не работают под Windows?

    2ord
    @2ord
    Один образ собирать для Linux, а другой для Windows, разве не так?

    Начинаю приходить к следующему выводу: если есть проект с графическим интерфейсом, собранный в контейнер под Linux, то он и не обязан запускаться на компьютере, на котором установлена Windows.
    Верно. И не просто "не обязан", а попросту не будет.

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

    2ord
    @2ord
    Что выбрать в качестве промежуточного хранилища в проекте?
    Redis таковое и есть.

    Смысл в кешировании не в том, чтобы сканировать в Redis всё подряд, а чтобы взять данные по заранее известному ключу или двух-трёх максимум, но не более, ключей.
    Кеширование имеет смысл тогда, когда количество попаданий в кеш него большое. Если для возврата ответа сервером необходимо совершить запросов по 120К записям, то у вас что-то не так.
    Ответ написан
    2 комментария
  • Как на уровне кода правильно реализовать работу SQLite3 и обрабатывать запросы к БД?

    2ord
    @2ord
    Вопрос не такой простой, как может показаться.
    Может я и не прав, но, по-моему, использование SQLite перекладывает заботу о разных аспектах на разработчика, что вынуждает его переходить на другие СУБД, в которых эти вещи учтены.
    SQLite позволяет работу с множественными читателями, но для множественных писателей необходимо откладывать запросы (при помощи очереди), пока текущая запись не будет выполнена.
    Пул соединений не поддерживается в SQLite и поэтому нужно вести учёт соединений в самом приложении.
    Ответ написан
    Комментировать
  • Как скормить звук python чтобы после его распознания выполнялось действие?

    2ord
    @2ord
    Звук отмычки.
    относительно лёгкая задача из-за специфического звука.

    Порядок действий:
    1. записать звуковой файл WAV с некоторым фоном в несколько секунд с обоих краев, наложив где-то в середине звук отмычки. Открыть файл в звуковом редакторе, допустим, Audacity. Посмотреть что там внутри, проиграть сэмпл.
    2. погуглить и установить необходимые библиотеки для анализа звука в Питоне.
    3. ставить эксперименты по анализу звука в Питоне. В результате нужно программно определить факт звучания отмычки и время. Повесить асинхронный колбэк для вывода на экран "ага, попался!" пр обнаружении звука.
    4. далее, добавлять [соль и перец] функциональность по вкусу.

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

    2ord
    @2ord
    Вопрос: существует ли какая-нибудь утилита, которая будет писать лог типа:
    Зачем утилита, если сама программа может писать в журнал?

    Сам автор программы задачу не осилил, поэтому сбросил её на меня :)
    А сам не можешь найти места, которые обращаются к СУБД и прочим ресурсам, и, в добавок, создают процессы? Найдя их, пиши в журнал.
    Ответ написан