Python 封装通过的 celery 服务

2019-08-06 10:19:30 +08:00
 kayseen
需求:
1.在客户端使用 celery 的时候,将 celery 的任务使用 redis.lpush 存储到 redis 中(比如发送短信或者邮箱)
2.自己封装一个 celery 服务,将该 celery 服务跑在一个端口,使用 redis 的 rpop 实时监控是否有任务存在,如果有则处理
不知道我描述的够不够清楚,我现在不知道这个轮子应该怎么写,大家有没有之后的 demo 可以借鉴下啊
2349 次点击
所在节点    Python
16 条回复
SingeeKing
2019-08-06 10:21:28 +08:00
你是不是对 Celery 有误解…… 它本身就可以自动监控是否有任务并处理,而且也可以用 Redis 做消息队列啊
37Y37
2019-08-06 10:25:08 +08:00
celery 本身就是个异步处理框架,都帮你做好了,你只需要用就行了,不用关心 redis 队列,使用可参考:
https://ops-coffee.cn/s/lXrp3igYo9W2UuE5Gauysg
kayseen
2019-08-06 10:26:27 +08:00
@SingeeKing 我知道你的意思,但是现在需求就是写一个通用的 celery 服务,就是你在项目中使用到 celery 的时候,只往 redis 中存任务,你封装的 celery 就是时刻监控 redis 中的任务...通俗点把 celery 单独提出来写个服务
leishi1313
2019-08-06 10:29:38 +08:00
还是跟其他几楼一样,celery 本来就是这么用的啊。或者针对 redis,有其他的轮子也可以用:python-rq.org
SingeeKing
2019-08-06 10:42:18 +08:00
意义何在啊,你这本身就是重复造了个 Celery 啊

你可以理解为 Celery 是一个消息队列的处理器、Redis 是一个消息队列; Celery 本身的作用就是「将任务存到 Redis 中」和「实时监控是否有任务存在,如果有则处理」,所以你现在的需求就是自己造一个 Celery

那么。。回复你的问题:Celery 就是你要的 demo
est
2019-08-06 10:43:45 +08:00
额。。。。。
youngce
2019-08-06 11:07:10 +08:00
你的问题,就好比现在你已经有一个轮子了,你只看到了轮胎,想着自己还要做个轮毂,殊不知人家轮胎里,已经包好了一个豪华轮毂了
AllenBigBear
2019-08-06 11:10:07 +08:00
@37Y37 我也关注了你的公众号,有些问题想借楼问一下,我最近在部署 django 2.0,配合 supervisor,celery 4,gunicorn 和 redis


部署的服务器是 1C1G5M 的良心云
然后我如果 supervisor 里面单独启动 gunicorn (也就是只运行 django ),加载速度没问题
但是如果我一并启动了 celery,服务器就一下子超卡。。
不知道有没有碰到过类似的问题?谢谢!
est
2019-08-06 11:13:54 +08:00
@youngce celery 本身就是轮子套轮子。。比如 RabbitMQ 这个其实本身功能就够强大了。celery 自作聪明套了一层。。
arrow8899
2019-08-06 11:15:12 +08:00
django 开放一个 API 出来就行了,导入 django-celery 模块,调用这个 API 就可以往 celery 里写入任务,没必要再去加一层 redis。
youngce
2019-08-06 11:18:38 +08:00
@est 还行吧,毕竟 celery 也是支持用 redis 作为消息队列的,当初我对 RabbitMQ 不怎么了解的时候,项目里已经有了 redis,就直接 celery+redis 一把梭了。现在看起来的话,确实还有有很多可以改进的地方- -
lolizeppelin
2019-08-06 11:25:34 +08:00
请使用 oslo.messaging
smallpython
2019-08-06 11:28:48 +08:00
楼上并没有在解决问题啊
我的理解
你说的客户端发送任务,服务器接收任务
其实就是客户端把任务放到消息队列里,那么你的服务端就不需要开什么服务端口
只需要 redis 端口开放出来就可以了
想要实现这个功能只需要客户端和服务器的任务名称一样,指定的消息队列一样,剩下的 celery 会自动调度任务
wd
2019-08-06 13:21:33 +08:00
@kayseen #3 celery 是可以独立运作的 看你说的是想自己往 broker 发消息应该也是可以的 可能需要你自己去看看实现的逻辑
c9106
2019-08-07 08:31:05 +08:00
朋友,celery flower 已经有 api 在那里了,只是简单了点,可以自己扩展
fansfans
2019-08-08 17:39:16 +08:00
@smallpython 跟我想说的差不多,但是需要在客户端创建同样的任务名称 然后调用,虽然这个任务不需要实现,但是感觉还是会很鸡肋 。如果模拟 TaskProducer.publish_task 的实现 应该可以达到发送函数名执行的效果

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

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

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

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

© 2021 V2EX