Integration skills of celery in tornado

发布于 2021-01-29 17:52:02

由于没有人提供此帖子的解决方案,而且我非常需要解决方法,因此,这是我的处境以及一些抽象的解决方案/想法供讨论。

我的堆栈:
1. Tornado
2. Celery
3. MongoDB
4. Redis
5. Rabbit MQ

我的问题:找到一种方法让龙卷风派遣一个芹菜任务(解决),然后异步收集结果(有什么想法吗?)。

方案1 :(请求/响应hack加上webhook)

  • 龙卷风收到一个(用户)请求,然后将{jobID:(user)request}保存在本地内存(或Redis)中,以记住在哪里传播响应,并使用jobID触发一个芹菜任务
  • 当celery完成任务时,它会在某些URL上执行webhook,并告诉龙卷风该jobID已经完成(加上结果)
  • 龙卷风检索(用户)请求并将响应转发给(用户)

这会发生吗?有逻辑吗?

方案2 :(Tornado加长轮询)

  • Tornado调度celery任务,并将一些主要的json数据返回给客户端(jQuery)
  • jQuery在接收到主要的json后(例如,每x微秒)进行一些长轮询,然后龙卷风根据某些数据库标志进行回复。当celery任务完成时,此数据库标志设置为True,然后jQuery“循环”完成。

这样有效吗?

还有其他想法/方案吗?

关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我偶然发现了这个问题,对我而言,反复达到后端的结果并不理想。因此,我使用Unix套接字实现了与方案1类似的Mixin。

    任务完成后,它会立即通知Tornado(准确地说,链中的下一个任务一旦运行就通知它),并且仅在后端点击一次结果。这是链接



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看