django 里面如何让 celery 的 task 产生数据后通知 channels 把数据传给前端,麻烦大佬指点一下
1
xpresslink 2018-03-01 14:22:26 +08:00
没太懂你这个需求,
前端向后端请求数据直接用 ajax 本身就是异步吧还用得着 celery ? 只有前端扔给后端一个异步任务比如生成一个文件,等生成好推消息给前端。让用户去下载。 这个用 celery 的 Task Singals 来写一段 callback 去实现呗。 |
2
cenphoenix 2018-03-01 16:40:03 +08:00
用 Group 是否可行?用户登录进来的时候根据用户 id 创建只有他的 Group 里,异步完成后也是根据这个 id 用 Group 进行通知
|
3
yuhuang OP @xpresslink 我的需求是这样的 https://s1.ax1x.com/2018/03/01/9reLlR.png ,现在的问题是怎么知道 celery 任务完成了,并且通知浏览器,这块不清楚怎么实现
|
4
yuhuang OP @xpresslink 我来研究一下 celery 的 Task Singals,感谢
|
5
cenphoenix 2018-03-01 17:54:42 +08:00
@yuhuang 你在 task 里面调用 Group 进行通知不行吗?象这样
@celery_app.task def send_phone_code(user_id, verify_token, phone_number): customer = Customer.objects.get(id=user_id) #发送短信操作 send_message(...) try: # 通知任务已完成 Group('phone_verify-%s' % customer.username).send({ 'text': json.dumps({ 'success': True, 'msg': 'new message sent' }) }) except Exception as e: # 通知任务失败 Group('phone_verify-%s' % customer.username).send({ 'text': json.dumps({ 'success': False, 'msg': e.msg }) }) |
6
yuhuang OP @cenphoenix 我用的是 Group 组的,现在是我在 Views 里面触发 task,不知道该如何给 channels 发消息,task 里面怎么去连前端进来的这个 Group 组里,并发消息发送出去
|
7
yuhuang OP @cenphoenix 是不是我思路错了
|