-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
supervisor+celery+celerybeat入门指南 #2
Labels
Comments
谢谢讲解 |
Good job, Thx! |
谢谢 讲的很明白! |
@app.task(queue='test_queue')试验了发现不行啊 |
celery-beat每3分钟自己重启一次是什么原因 |
这玩意是我很多年前写的了,估计早过时了。具体什么原因我也没法帮你了。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
1. 提前准备
略去相关工具的安装过程,其实都挺简单的!
celery作为异步任务队列, 需要一个中间人来协助celery存放和消耗任务信息。我们选择rabbitmq来做消息代理人。使用celery之前, 需要使用创建一个rabbitmq的管理员账号和一个能让该账号访问的vhost.
Rabbitmq的安装配置以及网页管理插件
假设准备的rabbitmq的信息如下:
示例项目结构
2. celery实例及任务
2.1 生成实例
2.2 定义Task
注意, 我们给app.task这个装饰器传了queue这个参数, 这样当异步执行的时候,这个task会被丢到名称为test_celery_queue的队列中, 然后被为这个队列工作的worker拿到并执行。当然, 我们也可以在CELERY_CONFIG中配置:
如果我们不指定queue的话,celery会默认自己指定一个队列。task的队列一定要对应的worke, 否者就会只生产不消费, 这些task就永远不会被执行了。
2.3 启动worker
我们需要在项目路径下,也就是test.celery文件下运行python解释器, 否者python解释器无法找到 src 这个包。 或者直接将项目路径添加到PYTHONPATH变量,就像这样
export PYTHONPATH=/data/test.celery
然后再启动worker:
参数解析
更多可配置参数s通过
celery worker -h
查看。2.4 验证正确性
在一个终端显示日志
另一个终端启动python的交互解释器
注:如果没有设置PYTHONPATH, 那就要在我们的项目文件夹下启动
如果一切正常的话,运行第二、三、四条命令的时候会看到有日志输出。而且第二条命令会有错误日志,提示缺少参数。
用法说明
如果直接调用某一个task, 那么该task就跟普通的函数一样, 会同步运行并直接返回结果。想要异步执行, 就要使用 delay 或者 apply_async 。
delay: 相对简单,怎么给add传参,就怎么传给它。比如:
add.delay(4, 5, 9)
或者add.delay(4 , 5, c=19)
等.apply_async: 列举几个常用的参数:
3. celery beat
我们以定时发邮件为例子
3.1 添加发邮件的task
在task.py的基础上修改:
由于Python标准库发邮件有点繁琐,我这里使用了自己简单封装的posts来发送邮件。邮件的内容就是执行任务的时间。
3.2 配置定时任务的schedule
参数 schedule 说明, 通常使用两种方式来指定:
更多用法详见 官方文档
3.3 启动celery beat
更多可配置参数通过
celery beat -h
查看。3.4 验证正确性
一个页面显示celery beat 的输入日志
一个终端页面显示 celery worker 输出日志
如果分别能看到产生和消耗任务的日志输出。那就成功了。
4. supervisor
4.1 (supervisord)配置并启动supervisor
启动supervisor的命令是 supervisord。我们可以使用 -c 参数来指定其配置文件的位置。比如:
supervisord -c supervisord.conf
supervisor的配置文件 supervisord.conf:
4.2 配置具体项目
我们会为不同的程序编写独立的ini配置文件,然后放置到一个统一的路径(比如 /etc/supervisord.d/)下让supervisor读取.具体项目的配置文件 test.celery.ini 如下
简单说明
source /data/test.celery/env/bin/activate
4.3 (supervisorctl) 管理程序进程
通过
sudo supervisorctl
可以进入管理客户端。我们可以使用各种命令管理程序的进程:常用的命令有:
也可以不进入来管理 ,例如每次更新玩配置,我们可以使其快速生效:
5. 结束语
上文中只是简单介绍了supervisor 、celery、 celerybeat的简单运用。如果有兴趣的话可以自己去深入了解!
*本篇文章到此结束,原创手打! *
人生苦短, 我用python!
The text was updated successfully, but these errors were encountered: