龙卷风芹菜整合技巧 [英] Tornado celery integration hacks
问题描述
由于没有人提供此帖子的解决方案,加上我迫切需要的事实一种解决方法,这是我的情况以及一些抽象的解决方案/想法,供您讨论。
Since nobody provided a solution to this post plus the fact that I desperately need a workaround, here is my situation and some abstract solutions/ideas for debate.
我的堆栈:
- 龙卷风
- 芹菜
- MongoDB
- Redis
- RabbitMQ
- Tornado
- Celery
- MongoDB
- Redis
- RabbitMQ
我的问题:找到一种方法让龙卷风派遣芹菜任务(已解决),然后异步收集结果(有什么想法吗?)。
My problem: Find a way for Tornado to dispatch a celery task ( solved ) and then asynchronously gather the result ( any ideas? ).
方案1 :(请求/响应hack加上webhook)
- Tornado收到一个(用户)请求,然后在本地内存(或Redis)中保存一个{jobID :(用户)请求}以记住在哪里传播响应,并使用jobID触发一个celery任务
- 当celery完成任务时,它会在某些网址上执行webhook,并告诉龙卷风该jobID具有f被感染(加上结果)
- 龙卷风检索(用户)请求并将响应转发给(用户)
这会发生吗?
方案2 :(龙卷风加长轮询)
- Tornado分派芹菜任务并向客户端(jQuery)返回一些主要的json数据
- jQuery在收到主要的json时进行一些长轮询(例如,每x微秒),龙卷风会根据某个数据库标志进行回复。当celery任务完成时,此数据库标志设置为True,然后jQuery循环完成。
这样有效吗?
还有其他想法/方案吗?
Any other ideas/schemas?
推荐答案
我偶然发现了这个问题和反复打后端的结果对我来说并不是最佳选择。因此,我使用Unix Sockets实现了与您的场景1类似的Mixin。
I stumbled upon this question and hitting the results backend repeatedly did not look optimal to me. So I implemented a Mixin similar to your Scenario 1 using Unix Sockets.
一旦任务完成,它会立即通知Tornado(准确地说,链中的下一个任务会立即通知它)运行),并且仅点击一次结果后端。这是链接。
It notifies Tornado as soon as the task finishes (to be accurate, as soon as next task in chain runs) and only hits results backend once. Here is the link.
这篇关于龙卷风芹菜整合技巧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!