Ответы пользователя по тегу Python
  • Как получить результат выполнения задачи в Asyncio?

    MAKAPOH
    @MAKAPOH
    многостаночник
    Можно в каждую функцию передать объект очереди через которую они вернут свой результат.
    Ответ написан
    Комментировать
  • Как решить подобную задачу используя async/await/asyncio?

    MAKAPOH
    @MAKAPOH
    многостаночник
    В первом приближении на asyncio ваши боты будут представлять из себя корутины а очереди надо заменить на таковые из пакета asyncio. Но одним asyncio вы не обойдётесь так как он слишком низкоуровневый, вам же придётся выполнять какие то http запросы, возможно слушать запросы от vk api и т.п. Реализовывать это самому на asyncio безсмысленно, лучше взять готовые реализации вроде aiohttp как вам уже советовали. Возможно что бы разобратся вам поможет вот такой синтетический пример на голом asyncio, тут несколько корутин получают собщения из своих очередей и просто печатают их на экран:
    код
    import asyncio
    import random
    
    
    class Bot:
        def __init__(self, bot_name, queue):
            self._name = bot_name
            self._queue = queue
    
        async def start(self):
            try:
                while True:
                    data = await self._queue.get()
                    print('{}: {}'.format(self._name, data))
            except asyncio.CancelledError:
                print("{}: stoped".format(self._name))
    
    
    async def message_generator(bots):
        i = 0
        while True:
            for bot in bots:
                i += 1
                await bot["queue"].put("msg {}".format(i))
                await asyncio.sleep(((random.random()/2.0)+0.1))
    
    
    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        bots = []
        n = 4
        for i in range(n):
            q = asyncio.Queue()
            t = loop.create_task(Bot("bot{}".format(i), q).start())
            bot = {
                "queue": q,
                "task": t
            }
            bots.append(bot)
        try:
            loop.run_until_complete(message_generator(bots))
        except KeyboardInterrupt:
            for bot in bots:
                bot["task"].cancel()
                loop.run_until_complete(bot["task"])
            loop.stop()


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

    MAKAPOH
    @MAKAPOH
    многостаночник
    Если я правильно всё понял то вам должно хватить:

    Идея следующая. Пишем корутину-исполнитель которая из очереди задач на скачивание берёт очередное задание, загружает что требуется, а результат кладёт в другую очередь результатов. С помощью вызова loop.create_task создаём несколько паралельно работающих корутин-исполнителей передав им как параметр очередь с задачами и очередь результатов. Пишем корутину-генератор задач, которая в соответствии с вашим алгоритмом будет наполнять очередь задачами. Как то так, к сожалению сейчас нет времени писать код.
    По теме есть вот такой доклад - Patterns for asyncio applications там описаны несколько вариантов запуска циклов, в том числе в отдельном потоке как вам надо. Дерзайте :)
    Ответ написан
    1 комментарий
  • Как параллельно обрабатывать несколько запросов на сервере?

    MAKAPOH
    @MAKAPOH
    многостаночник
    ... параллельно обрабатывать запросы пользователей ... вызывается какая-то тяжелая функция, пока эта функция не завершится, запрос другого пользователя не будет обработан, а начнется обрабатываться только после окончания обработки запроса первого пользователя. Как это избежать? ...

    Запускать нескоклько процессов вашего приложения одновременно. В документации описаны различные вараинты.
    Ответ написан
    Комментировать
  • База данных и Питон?

    MAKAPOH
    @MAKAPOH
    многостаночник
    У python для общения с различными БД существует стандарт - Python Database API Specification v2.0. Реализация для sqlite3, для postgresql. Чем оно отличается от работы с БД из php не подскажу.
    Ответ написан
    Комментировать
  • С чего начать изучение нейронных сетей на python?

    MAKAPOH
    @MAKAPOH
    многостаночник
    На stepic.ru есть курс - Нейронные сети, попробуйте начть с него. Сам я его ещё не смотрел но судя по оглавлению практика там есть.
    Ответ написан
    3 комментария
  • Как передать запрос на другой URL?

    MAKAPOH
    @MAKAPOH
    многостаночник
    Судя по документации вам нужен AsyncHTTPClient. Необходимые параметры ожно задать через объект Request передаваемый в метод fetch. Попробуйте.
    Ответ написан
    Комментировать
  • Передача параметра в декоратор python?

    MAKAPOH
    @MAKAPOH
    многостаночник
    Описание и допустимый синтаксис декораторов функций приведены в function-definitions.

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

    MAKAPOH
    @MAKAPOH
    многостаночник
    У ресурса ru.hexlet.io есть slack чат с python разделом. По моим наблюдениям там сидят как новички так и не очень.
    Ответ написан
    Комментировать
  • Как правильно работать с QThread?

    MAKAPOH
    @MAKAPOH
    многостаночник
    Я не спец во внутреней архитектуре Qt но как я понял для правильного взаимодействия сигналов и слотов из разных потоков оба должны иметь работающий событийный цикл и соединение должно осуществлятся через некую внутренюю очередь а не напрямую (для этого соединяемые объекты должны принадлежать разным потокам). У вас объект runnable находится в GUI потоке. Возможно из за этого проблемы. Попробуйте все ваши манипуляции вынести в отдельный объект вычислитель, наследник QObject, в конструктор AThread передать всё что нужно для связи с "внешним миром", а в методе run создать объект вычислитель соединив его сигналами и слотами с объектами из GUI потока вызвав после этого exec(). Здесь можно посмотреть более подробную статью с примером.
    Ответ написан
    Комментировать
  • С помощью чего создать веб интерфейс для программы распознавания лиц на OpenCV?

    MAKAPOH
    @MAKAPOH
    многостаночник
    В дополнении ко всем ответившим упомяну ещё tufao. Писал на нём небольшой REST API для своего C++ проекта. В принципе жить можно. Но по моим наблюдениям скорость разработки будет раза в два ниже чем на python, так что смотрите сами что вам важнее.
    Ответ написан
    Комментировать