Comments (1)
Здравствуйте. У нас есть опыт реализации асинхронной обработки фоновых задач. Готовы помочь с проектированием и реализацией. Предварительно набросал несколько идей.
Принцип следующий:
- Методы, обработка которых занимает длительное время, потребляет много ресурсов, блокирует IO или GIL, выносится в отдельные от сервера (web-сервера, а точнее *SGI сервера a-la flask или aiohttp) процессы "воркеры".
- Процессы могут быть размещены в т.ч. на другой инфраструктуре чем сам вебсервис (другие VM на одном хосте или даже других аппаратных хостах). Последнее похоже на ваш случай, т.к., как я понял, используется оффлоад на CUDA GPU.
На чем мы делали такое:
- Request/Reply via REST. Вебсервис (flask) отправляет задачу в воркеры (aiohttp) по REST, воркер присваивает ей номер и синхронно возвращает id. Flask записывает id в локальную модель. Микросервис по готовности задачи возвращает результат в виде встречного запроса во flask по REST (webhook). Преимущества: простота, простой инструментарий. Похожие подходы разработки бэкенда и микросервисов.
- Celery. Процесс, который обрабатывает фоновые задачи. Применяется, как правило, в комбинациии с Django. В качестве транспорта используется RabbitMQ. Был бы у вас Django, имело бы смысл начать с него. В других стэках преимуществ не вижу, можно применять п. 3.
- Pika, Rabbitmq, Asyncio - микросервис-воркер реализуется на pure python, транспорт -AMQP (RabbitMQ). Инициатор (условный flask) отправляет задачу в очередь. Микросервисы берут сообщения из этой очереди work queues pattern. Обрабатывают и складывают результат в другую очередь, которую вычитывает инициатор. Преимущества: предельно высокая масштабируемость во всех измерениях (заложена легкая масштабируемость, миграция на другую очередь, например облачный сервис AWS, GCP тоже делается несложным рефакторингом). Недостатки: специфические процессы разработки и тестирования. Удобно применять в очень больших проектах, где за каждый из микроосервисов отвечает отдельная команда. В вашем случае - это overkill.
Я бы предварительно мог рекомендовать начать с варианта 1.
PS:
Frontend (UI) - частный случай вопроса достижениия асинхронности. Развязка делается путем осуществления асинхронных вызовов к вэб бэкенду (принцип называется SPA. Ну и частный случай, вы упоминали - PWA). Протокол общения фронтенда и бэкенда можно использовать тот же самый, что и описан в п.1 выше - REST. В т.ч. можно в некотором масштабе использовать его же и для уведомлений, инициированных сервером (через REST long polling).
from angelinareader.
Related Issues (20)
- Выделение букв в слове (3тчк и 6тчк) HOT 2
- Апостоф и ударение HOT 2
- 1 ми№ 6 с
- Исправить попадание писем с результатами в спам HOT 1
- Переход на эффективную архитектуру (EfficientDet) HOT 4
- Учет контекста символов
- Заменить тчк4 с ' на ` HOT 1
- Сделать отдельный режим для разметки из учебника русского языка (включение параметром)
- Учесть что грамматическая скобка очень редко бывает в математике
- Сделать примеры в столбик
- Сделать и включить в интерфейс обратный конвертер (текст-брайль) HOT 6
- Сделать в интерфейсе проверку орфографии в распознанном тексте
- Сделать в интерфейсе справочник альтернативных значений символа
- Включить в справку раздел, что программа умеет, что нет
- Сделать узбекский латиницей
- Сохраняется битый файл all_users, потом сайт не открывается.
- Греческий алфавит HOT 10
- При расшифровке греческих символов в русском языке (и математике) использовать советскую греческую кодировку
- Can't download retina_chars_eced60.clr.008 HOT 1
- Problems with Liblouis
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from angelinareader.