目前正在尝试清除celery
如何使用被告知的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
我只是为了测试芹菜是如何工作的,所以一旦拿到芹菜,我就可以实施其他一些东西。
提前感谢任何建议。
答案 0 :(得分:0)
您想要实现的目标是不可能的 - 至少不是这种方法。返回后,方法无法执行某些操作。您需要决定是否要等待任务结果或直接向客户返回内容。
如果您想要快速响应用户(直接返回),则需要在浏览器和django /任务队列之间建立另一个通信通道
一个解决方案可能是django result backend,它将您的任务的结果写入django数据库。与此同时,您可以创建另一个视图,您可以从浏览器调用该视图,直到结果显示为long polling。
或者你看看websockets。它们使您能够从服务器向客户端发送内容,而无需浏览器在前面询问。在django世界中,你可能想要看django channels。在这种情况下,渠道可能是芹菜的替代品。
这只是实现你所描述内容的几种可能方式。