想求助一个关于 Celery 远程调用的问题

2017-05-05 09:28:37 +08:00
 NaVient
在网上找了很久也没找到 Celery 远程调用的例子,Celery 是一个分布式的任务队列,应该是能够支持在其他机器上产生 worker 作为消费者的,请问各位大大有 demo, 或者例子看看吗?
4134 次点击
所在节点    Python
10 条回复
gulu
2017-05-05 09:45:30 +08:00
机器 A,B,C 上的 celery_app 用同一个 broker
KIDJourney
2017-05-05 09:48:53 +08:00
用 broker 实现的分布式。
VicYu
2017-05-05 09:51:10 +08:00
A 机器的 Task broker 比如指定到 redis://10.10.10.10:12345/0

B 机器,C 机器的 worker,启动时候(celery worker -b redis://10.10.10.10:12345/0)或者在配置时同样指定 redis://10.10.10.10:12345/0
NaVient
2017-05-05 09:56:42 +08:00
@VicYu
@KIDJourney
@gulu

我理解的消费者的代码是 xx.delay 这个函数,这个函数需要部署在其他机器上吗
neoblackcap
2017-05-05 10:13:35 +08:00
@NaVient 按你说的 xx 那个用 @app.task 装饰的函数是需要在其他机器部署的。
kinghui
2017-05-05 10:14:13 +08:00
@NaVient xx.delay 的这个 xx 既可以是具体的函数, 也可以是一个 Celery 的签名, 参见 http://docs.celeryproject.org/en/latest/userguide/canvas.html#signatures
NaVient
2017-05-05 10:26:21 +08:00
@neoblackcap
@kinghui
感谢,其实就是想知道这个.
zhengxiaowai
2017-05-05 10:33:20 +08:00
其实,我觉得不应该部署在其他机器上的,起码从部署上来说多了不少麻烦。结构上也变得耦合,下次修改 task 的话要在多处修改。

我觉得应该封装成远程调用的方式,比如 grpc、http 这样子的比较好
julyclyde
2017-05-05 11:14:37 +08:00
@zhengxiaowai 多处修改倒不是难事,多台机器发同样的文件而已。
你用 grpc 的话,实际执行工作的 worker 也不能只有一台吧,其实没啥区别
tuteng
2017-05-06 09:52:26 +08:00
同意 @VicYu @neoblackcap @kinghui 可以通过 send_task 发布任务,执行远程调用
具体可以参考这个 https://github.com/mher/flower celery 的管理工具

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/359251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX