我有一个 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是否需要通过网络套接字向我发送请求?还是我需要在自己身边实施?还是我们都必须执行此操作?
任何帮助和指导将不胜感激。