Ответы пользователя по тегу Python
  • Как в telethon отслеживать сообщения с нескольких аккаунтов параллельно?

    @mgearr
    Использовать треды, когда уже используется asyncio - грязноватая методика. Иногда, конечно, это имеет смысл, но в данном случае можно (и нужно?) обойтись одним asyncio. Вот кабы библиотека была синхронная, то другое дело, треды были бы в тему. Но она асинхронная

    Гуглить на тему gather и concurrent tasks
    Сцылочка на соответствующий пунт штатной документации: Running Tasks Concurrently. Там в примере почти в точности точно то, что нужно

    Или, может быть, лучше сделать через wait и обрабатывать события более тонко/гибко/сложно
    Ответ написан
    Комментировать
  • Почему не устанавливаются vk_api и vk для Python?

    @mgearr
    Пишет же чёрным по белому: уже установлено (Requirement already satisfied: vk_api)
    Ответ написан
  • Как заставить elif вернуться к циклу while True для повтора самого цикла?

    @mgearr
    break - прервать цикл
    continue - запустить с начала
    Ответ написан
    Комментировать
  • Pool vs ThreadPool или как задействовать все процессоры с максимальной отдачей?

    @mgearr
    Ну а как вообще запускать параллельные треды на питоне?
    На чистом питоне - видимо, никак. Ведь именно для того знаменитый GIL и сделали, чтоб нельзя было. На C и CPython - можно, но это уже выход за рамки питона

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

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