Что такое асинхронная текстовая служба в Windows 10
Обновлено: 21.11.2024
Uvicorn — это реализация веб-сервера ASGI для Python.
До недавнего времени в Python отсутствовал минимальный низкоуровневый интерфейс сервера/приложения для асинхронных фреймворков. Спецификация ASGI заполняет этот пробел и означает, что теперь мы можем приступить к созданию общего набора инструментов, который можно использовать во всех асинхронных платформах.
Быстрый старт¶
Установить с помощью pip :
Это установит uvicorn с минимальными (чистый Python) зависимостями.
Это установит uvicorn с зависимостями "на основе Cython" (где это возможно) и другими "необязательными дополнениями".
В этом контексте "на основе Cython" означает следующее:
Кроме того, "дополнительные функции" означают, что:
- протокол веб-сокетов будет обрабатываться веб-сокетами (если вы хотите использовать wsproto, вам нужно будет установить его вручную), если это возможно.
- флаг --reload в режиме разработки будет использовать watchgod .
- у пользователей Windows будет установлен colorama для цветных бревен.
- будет установлен python-dotenv, если вы захотите использовать параметр --env-file.
- Будет установлен PyYAML, чтобы при желании вы могли предоставить файл .yaml для --log-config .
Создайте приложение в example.py :
Использование¶
Инструмент командной строки uvicorn — это самый простой способ запустить ваше приложение.
Параметры командной строки¶
Дополнительную информацию см. в документации по настройкам.
Программный запуск¶
Для запуска uvicorn непосредственно из вашего приложения.
пример.py:
Запуск с Gunicorn¶
Gunicorn — это зрелый, полнофункциональный сервер и менеджер процессов.
Uvicorn включает рабочий класс Gunicorn, позволяющий запускать приложения ASGI со всеми преимуществами производительности Uvicorn, а также предоставляющий полнофункциональные возможности управления процессами Gunicorn.
Это позволяет вам увеличивать или уменьшать количество рабочих процессов "на лету", плавно перезапускать рабочие процессы или выполнять обновления сервера без простоев.
Для производственных развертываний мы рекомендуем использовать gunicorn с рабочим классом uvicorn.
Для конфигурации, совместимой с PyPy, используйте uvicorn.workers.UvicornH11Worker .
Дополнительную информацию см. в документации по развертыванию.
Фабрики приложений¶
Флаг --factory позволяет загружать приложение из фабричной функции, а не напрямую из экземпляра приложения. Фабрика будет вызываться без аргументов и должна возвращать приложение ASGI.
пример.py:
Интерфейс ASGI¶
Uvicorn использует спецификацию ASGI для взаимодействия с приложением.
Приложение должно предоставлять асинхронный вызываемый объект, который принимает три аргумента:
- scope — словарь, содержащий информацию о входящем соединении.
- receive — канал для получения входящих сообщений с сервера.
- send — канал, по которому отправляются исходящие сообщения на сервер.
Два распространенных шаблона, которые вы можете использовать, относятся к приложениям, основанным на функциях:
Или приложения на основе экземпляров:
Для приложений рекомендуется создавать исключения для типов областей, которые они не обрабатывают.
Содержимое аргумента области действия и сообщения, ожидаемые при приеме и отправке, зависят от используемого протокола.
Сопрограмма экземпляра связывается с сервером, отправляя сообщения сопрограмме отправки.
Запросы и ответы¶
Вот пример, который отображает метод и путь, используемые во входящем запросе:
Чтение тела запроса¶
Вы можете выполнять потоковую передачу тела запроса без блокировки пула задач asyncio, получая сообщения из сопрограммы получения.
Потоковые ответы¶
Почему ASGI?¶
Наиболее хорошо зарекомендовавшие себя веб-фреймворки Python начинались как фреймворки на основе WSGI.
Альтернативные серверы ASGI¶
Сильная сторона протокола ASGI заключается в том, что он отделяет реализацию сервера от структуры приложения. Это позволяет создать экосистему взаимодействующих веб-серверов и платформ приложений.
Дафна¶
Первой реализацией сервера ASGI, изначально разработанной для поддержки каналов Django, является веб-сервер Daphne.
Любое из приведенных здесь примеров приложений с таким же успехом можно запустить с помощью daphne.
Гиперкорн¶
Hypercorn изначально был частью веб-фреймворка Quart, а затем был выделен в отдельный сервер ASGI.
Структуры ASGI¶
Вы можете использовать Uvicorn, Daphne или Hypercorn для запуска любой платформы ASGI.
Для небольших служб вы также можете напрямую писать приложения ASGI.
Звездочка¶
Starlette – это облегченная платформа/инструментарий ASGI.
Каналы Django¶
Спецификация ASGI изначально была разработана для использования с каналами Django.
Channels немного отличается от других платформ ASGI тем, что обеспечивает асинхронный внешний интерфейс для внутреннего интерфейса многопоточной платформы. Это позволяет Django поддерживать WebSockets, фоновые задачи и длительные соединения, при этом код приложения по-прежнему работает в стандартном многопоточном контексте.
Кварта¶
Quart — это веб-фреймворк ASGI, похожий на Flask.
FastAPI¶
FastAPI – это платформа API, основанная на Starlette и Pydantic, в значительной степени вдохновленная предыдущими серверными версиями APIStar.
Вы пишете параметры функции API с объявлениями типов Python 3.6+ и получаете автоматическое преобразование данных, проверку данных, схемы OpenAPI (со схемами JSON) и интерактивные пользовательские интерфейсы документации API.
BlackSheep¶
Его наиболее отличительными особенностями являются встроенная поддержка внедрения зависимостей, автоматическая привязка параметров с помощью аннотаций типа обработчика запросов и автоматическое создание документации OpenAPI и пользовательского интерфейса Swagger.
Сокол¶
Falcon – это минималистичная платформа REST и серверной части приложений для Python, ориентированная на надежность, правильность и производительность в любом масштабе.
Асинхронный обмен сообщениями может быть реализован различными способами. Благодаря очередям, темам и подпискам служебная шина Azure поддерживает асинхронность с помощью механизма хранения и пересылки. В обычном (синхронном) режиме вы отправляете сообщения в очереди и разделы и получаете сообщения из очередей и подписок. Приложения, которые вы пишете, зависят от того, всегда ли эти сущности доступны. Когда состояние объекта меняется из-за различных обстоятельств, вам нужен способ предоставить объект с ограниченными возможностями, который может удовлетворить большинство потребностей.
Приложения обычно используют шаблоны асинхронного обмена сообщениями, чтобы обеспечить несколько сценариев связи. Вы можете создавать приложения, в которых клиенты могут отправлять сообщения службам, даже если служба не запущена. Для приложений, которые испытывают всплески связи, очередь может помочь выровнять нагрузку, предоставив место для буферизации связи. Наконец, вы можете получить простой, но эффективный балансировщик нагрузки для распределения сообщений между несколькими компьютерами.
Чтобы поддерживать доступность любого из этих объектов, рассмотрите несколько различных способов, которыми эти объекты могут казаться недоступными для надежной системы обмена сообщениями. Вообще говоря, мы видим, что сущность становится недоступной для приложений, которые мы пишем, следующими способами:
- Невозможно отправлять сообщения.
- Невозможно получать сообщения.
- Невозможно управлять объектами (создавать, извлекать, обновлять или удалять объекты).
- Не удалось связаться со службой.
Для каждого из этих сбоев существуют разные режимы сбоя, которые позволяют приложению продолжать выполнять работу с некоторым уровнем ограниченных возможностей. Например, система, которая может отправлять сообщения, но не получать их, может получать заказы от клиентов, но не может их обрабатывать. В этом разделе обсуждаются потенциальные проблемы, которые могут возникнуть, и способы их устранения. Служебная шина ввела ряд мер по устранению проблем, которые вы должны принять, и в этом разделе также обсуждаются правила, регулирующие использование этих разрешенных мер.
Надежность служебной шины
Существует несколько способов решения проблем с сообщениями и объектами, а также рекомендации по правильному использованию этих средств. Чтобы понять рекомендации, вы должны сначала понять, что может дать сбой в служебной шине. Из-за конструкции систем Azure все эти проблемы, как правило, недолговечны. На высоком уровне различные причины недоступности выглядят следующим образом:
- Дросселирование из внешней системы, от которой зависит служебная шина. Регулирование происходит из-за взаимодействия с хранилищем и вычислительными ресурсами.
- Проблема с системой, от которой зависит служебная шина. Например, в определенной части хранилища могут возникнуть проблемы.
- Сбой служебной шины в одной подсистеме. В этой ситуации вычислительный узел может перейти в несогласованное состояние и должен перезапустить себя, в результате чего все объекты, которые он обслуживает, будут распределять нагрузку между другими узлами. Это, в свою очередь, может вызвать кратковременную медленную обработку сообщений.
- Сбой служебной шины в центре обработки данных Azure. Это "катастрофический сбой", во время которого система недоступна в течение многих минут или нескольких часов.
Термин хранилище может означать как хранилище Azure, так и SQL Azure.
Служебная шина содержит ряд способов устранения этих проблем. В следующих разделах обсуждается каждая проблема и соответствующие меры по ее устранению.
Дросселирование
При использовании служебной шины регулирование позволяет совместно управлять скоростью передачи сообщений. Каждый отдельный узел служебной шины содержит множество сущностей. Каждый из этих объектов предъявляет требования к системе с точки зрения ЦП, памяти, хранилища и других аспектов. Когда какой-либо из этих аспектов обнаруживает использование, превышающее определенные пороговые значения, служебная шина может отклонить данный запрос.Вызывающий объект получает исключение "сервер занят" и повторяет попытку через 10 секунд.
В качестве меры предосторожности код должен считывать ошибку и останавливать любые повторные попытки сообщения как минимум на 10 секунд. Поскольку ошибка может возникать в разных частях пользовательского приложения, предполагается, что каждая часть независимо выполняет логику повторной попытки. Код может снизить вероятность регулирования, включив секционирование в очереди или теме.
Проблема с зависимостью Azure
У других компонентов в Azure иногда могут возникать проблемы с обслуживанием. Например, при обновлении системы, в которой используется служебная шина, возможности этой системы могут быть временно ограничены. Чтобы обойти проблемы такого типа, служебная шина регулярно исследует и реализует меры по их устранению. Побочные эффекты этих смягчений проявляются. Например, для решения временных проблем с хранилищем служебная шина реализует систему, позволяющую последовательно выполнять операции отправки сообщений. Из-за характера устранения проблемы отправленное сообщение может занять до 15 минут, прежде чем оно появится в затронутой очереди или подписке и будет готово к операции получения. Вообще говоря, большинство организаций не будут сталкиваться с этой проблемой. Однако, учитывая количество сущностей в служебной шине в Azure, это снижение иногда необходимо для небольшого подмножества клиентов служебной шины.
Сбой служебной шины в одной подсистеме
В любом приложении обстоятельства могут привести к тому, что внутренний компонент служебной шины станет несогласованным. Когда служебная шина обнаруживает это, она собирает данные из приложения, чтобы помочь в диагностике того, что произошло. После сбора данных приложение перезапускается, пытаясь вернуть его в согласованное состояние. Этот процесс происходит довольно быстро и приводит к тому, что объект оказывается недоступным в течение нескольких минут, хотя типичное время простоя намного короче.
В этих случаях клиентское приложение генерирует исключение времени ожидания или исключение обмена сообщениями. Служебная шина содержит решение этой проблемы в виде автоматизированной логики повторных попыток клиента. После того, как период повторных попыток исчерпан и сообщение не доставлено, вы можете изучить другие способы, упомянутые в статье о том, как справиться с перебоями и авариями.
Дальнейшие шаги
Теперь, когда вы изучили основы асинхронного обмена сообщениями в служебной шине, узнайте больше об обработке сбоев и аварий.
Записывайте быстрые видеоролики с экрана и камеры. Необходимый инструмент для гибридных рабочих мест.
Для Mac, Windows, iOS и Android
Ваш браузер не поддерживает тег видео. Ваш браузер не поддерживает тег видео.
Мгновенно готовы поделиться и посмотреть — дома, в офисе или и то, и другое.
Более эффективный, выразительный и действенный способ общения.
Нечего планировать. Нечего печатать.
Отправляйте быстрые видеоролики, когда календари не выстраиваются в очередь и у вас нет времени набирать стену текста.
Будьте собой.
Как весело или формально, как вы хотите. Столько дублей, сколько вам нужно.
Больше, чем слова.
Забавный факт: благодаря видео люди запоминают на порядок больше информации, чем текст.
Отлично подходит для любой команды. Абсолютно необходимая вещь для распределенных команд.
Ваш браузер не поддерживает тег видео. Ваш браузер не поддерживает видео тег. Ваш браузер не поддерживает видео тег. Ваш браузер не поддерживает тег видео.
Попасть на ту же страницу
Убедитесь, что у каждого есть контекст, необходимый для эффективной работы.
Проверка кода с помощью кнопки воспроизведения
Включите видео в свои запросы на вытягивание, чтобы обеспечить общий контекст и ускорить цикл обратной связи.
Визуальная обратная связь по визуальным решениям
Уточняйте детали, не теряясь в дебрях.
Продавать, когда вас нет в комнате
Выделяйтесь, сохраняйте индивидуальность и продвигайте сделки.
Loom позволяет мне более лично общаться с людьми без необходимости делать 75 различных звонков один на один, что просто невозможно при таком масштабе.
На этой странице показано, как преобразовать длинные аудиофайлы (более 1 минуты) в текст с помощью асинхронного распознавания речи.
Асинхронное распознавание речи запускает длительную операцию обработки звука. Используйте асинхронное распознавание речи для расшифровки звука продолжительностью более 60 секунд. Для более короткого аудио синхронное распознавание речи выполняется быстрее и проще.
Аудиоконтент можно отправлять непосредственно в функцию преобразования речи в текст из локального файла для асинхронной обработки. Однако ограничение времени аудио для локальных файлов составляет 60 секунд.Попытка расшифровать локальные аудиофайлы продолжительностью более 60 секунд приведет к ошибке. Чтобы использовать асинхронное распознавание речи для расшифровки звука продолжительностью более 60 секунд, ваши данные должны быть сохранены в сегменте Google Cloud Storage.
Вы можете получить результаты операции с помощью метода google.longrunning.Operations. Результаты остаются доступными для извлечения в течение 5 дней (120 часов). У вас также есть возможность загрузить свои результаты непосредственно в корзину Google Cloud Storage.
Запись длинных аудиофайлов с помощью файла Google Cloud Storage
В этих примерах используется сегмент облачного хранилища для хранения необработанного аудиовхода для длительного процесса расшифровки. Пример типичного ответа операции longrunningrecognize см. в справочной документации.
Протокол
Подробнее см. в конечной точке API-интерфейса speech:longrunningrecognize.
Чтобы выполнить синхронное распознавание речи, отправьте запрос POST и предоставьте соответствующее тело запроса. Ниже показан пример запроса POST с использованием curl. В примере используется токен доступа для учетной записи службы, настроенной для проекта с помощью интерфейса командной строки Google Cloud Google Cloud. Инструкции по установке интерфейса командной строки gcloud, настройке проекта со служебной учетной записью и получении токена доступа см. в кратком руководстве.
Дополнительную информацию о настройке тела запроса см. в справочной документации RecognitionConfig и RecognitionAudio.
где имя — это имя длительной операции, созданной для запроса.
Если операция не завершена, вы можете опросить конечную точку, многократно отправляя запрос GET до тех пор, пока свойство ответа не станет истинным .
gcloud
Подробнее см. в описании долгоиграющей команды.
Чтобы выполнить асинхронное распознавание речи, используйте интерфейс командной строки Google Cloud, указав путь к локальному файлу или URL-адрес Google Cloud Storage.
Если запрос выполнен успешно, сервер возвращает идентификатор длительной операции в формате JSON.
Затем вы можете получить информацию об операции, выполнив следующую команду.
Вы также можете опрашивать операцию до ее завершения, выполнив следующую команду.
После завершения операции возвращается стенограмма аудио в формате JSON.
Читайте также: