当前试图清洁 celery
与django一起工作的方式,该django被告知可以异步工作
我已经运行了简单的celery
任务,该任务在文档后运行良好,所以我相信我已经安装了芹菜并运行正常。
但是,我不确定它如何在return
例如
我有这样的创建新用户任务
@app.task
def new_user(first, last, table):
user = UserProfile()
user.first_name = first
user.last_name = last
user.table = table
user.save()
return user
我有一个API呼叫,只是为了将其作为芹菜的工作方式作为样本。
我的视图中有这个
class List(View):
def post(self, request):
all_users = UserMQS().profile()
output = []
for user in all_users:
output.append({
'id': user.id,
'first_name': user.first_name,
'last_name': user.last_name
})
ns = new_user.s('First Name1', 'Last Name1', "Table1")
res = ns.delay()
return JsonResponse(output, safe=False)
res.get()
我也尝试了new_user.delay('First Name1', 'Last Name1', "Table1")
之类的东西,但不起作用。
有人可以给我一个想法吗?
我希望return JsonResponse
在创建new_user
时运行。这不仅是为了创建new_user
,我只是为了测试芹菜的工作方式,以便一旦拿到芹菜,我就可以实现其他事情。
预先感谢您的任何建议。
您想要实现的目标是不可能的 - 至少没有这种方法。方法返回后无法做某事。您需要确定是否要等待任务结果还是直接将某些内容返回给客户。
如果您想要对用户的快速响应(直接返回),则需要浏览器和django/task Queue之间的另一个通信频道
一个解决方案可能是Django结果后端,它是由Django数据库中的任务编写的。与此一起,您可以创建另一种视图,直到结果出现又称投票。
。,或者您在WebSocket上查看。它们使您无需浏览器在前面询问即可将服务器从服务器发送到客户端。在Django世界中,您可能想看的是Django频道。在这种情况下,通道可能是芹菜的替代品。
这只是实现您描述的几种可能的方法。