Создание неблокирующего сервиса restful с помощью aiohttp
Требование:
веб-сервис для поддержки инициализации функции обучения модели машинного обучения и возврата к успеху, который занимает около 4 часов.
Для поддержки функции прогнозирования на ранее обученных моделях.
Обе вышеперечисленные функции должны работать параллельно без блокировки.
мы смогли добиться этого, создав очередь задач с использованием сельдерея и перенеся функцию обучения в очередь, но хотели узнать, существуют ли лучшие методы.
Я искал модули асинхронного веб-сервиса и нашел aiohttp. Я написал пример кода ниже, но мне кажется, что если я запускаю функцию run_job, то функция предиката блокируется.
from aiohttp import web
async def training_job():
for i in range(100100):
print(i)
return i
async def predict(request):
## some logic
text = "Value after logic"
return web.Response(text=text)
async def run_job(request):
result = await training_job()
return web.Response(text="Done")
app = web.Application()
app.add_routes([web.get('/', predict),
web.get('/run_job', run_job)])
web.run_app(app)