完成用celery创建的异步任务后,如何向API用户发送响应?

时间:2019-06-24 08:34:16

标签: django websocket django-rest-framework celery django-celery

我有一个 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是否需要通过网络套接字向我发送请求?还是我需要在自己身边实施?还是我们都必须执行此操作?

任何帮助和指导将不胜感激。

0 个答案:

没有答案