У меня есть REST API (созданный с использованием django rest-framework
), выставленный пользователю USER_1.Когда USER_1 обращается к этому API, моя система создает асинхронную задачу (созданную с использованием celery
).Эта задача возвращает некоторый результат, который мне нужно вернуть обратно в USER_1.У меня вопрос, как этого добиться, не блокируя поток?Я попытался использовать метод задач .get()
, но он блокирует основной поток, который не справляется с задачей асинхронного выполнения задач.
Ниже приведена структура моего кода:
views.py
class MyAPI(APIView):
def post(self, request):
task = some_async_task.delay()
# Need a way here to get result returned by async task
# for now sending some static response
return JsonResponse({'status': 'Success'})
tasks.py
@app.task
def some_async_task():
# some processing that takes few mins
result = {'key1': 'value1'} # data I wish to send to USER_1
return result
Я уже искал это и обнаружил, что некоторые люди предлагают использовать websockets
.Честно говоря, я не знаю, websockets
.Как это действительно работает?Придется ли пользователю USER_1 отправлять мне запросы через websockets?Или это то, что мне нужно реализовать на моей стороне?Или мы оба должны это реализовать?
Буду признателен за любую помощь и руководство.