Хранить ссылки на Dask Futures в приложении Flask / FastAPI

Я создаю приложение FastAPI с конечной точкой для запуска вычисления Dask. Конечная точка API отправляет этот вызов планировщику Dask и просто возвращает ключ Future.

trigger
x = client.submit
    (
        function_name,
        arg1,
        arg2
    )
return x.key

У меня есть две другие конечные точки для получения статуса и результата задачи, которые принимают key в качестве входных данных.

status
status = Future(key=key, client=client).status
return status
result
result = Future(key=key, client=client).result()
return result

Конечно, таким образом я теряю ссылку на будущее после возврата trigger, и в этом случае Даск больше не вычисляет это. Таким образом, даже если ключ будет отдан клиенту, мы навсегда получим статус pending.

Сейчас я сохраняю ссылки на объект Future как словарь Python в приложении, и это работает. Но в идеале я бы хотел, чтобы мое приложение API не имело состояния. Что будет хранить эти фьючерсы вне этого приложения? Есть ли в Python хорошие библиотеки кеширования, которые могут хранить объекты Python (со ссылками)?


person Sukanya Dasgupta    schedule 14.12.2020    source источник


Ответы (1)


Попробуйте использовать Flask + Celery для обработки фоновых вычислений Dask. Ниже приведены несколько ссылок для справки:

  1. https://flask.palletsprojects.com/en/1.1.x/patterns/celery/
  2. https://blog.miguelgrinberg.com/post/using-celery-with-flask
  3. https://medium.com/@frassetto.stefano/flask-celery-howto-d106958a15fe
person Nandeesh    schedule 14.12.2020