当前位置: 首页 > 面试题库 >

Integration skills of celery in tornado

扶文光
2023-03-14
问题内容

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

我的堆栈:
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“循环”完成。

这样有效吗?

还有其他想法/方案吗?


问题答案:

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

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



 类似资料:

相关阅读

相关文章

相关问答