Integration skills of celery in tornado
由于没有人提供此帖子的解决方案,而且我非常需要解决方法,因此,这是我的处境以及一些抽象的解决方案/想法供讨论。
我的堆栈:
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“循环”完成。
这样有效吗?
还有其他想法/方案吗?