django + celery + supervisor 定时任务 + 部署
环境 1 2 3 4 django 2.0.6 (上一篇文章有详细项目新建的描述) celery 4.2.0 django-celery-beat 1.1.1 django-celery-results 1.0.1
安装配置 celery 选择 broker 1 2 我选择了RabbitMQ(官方推荐,安装配置简单) [了解更多](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#choosing-a-broker) 安装RabbitMQ
1 sudo apt-get install rabbitmq-server
添加配置到 setting.py 末尾
1 2 # celery broker BROKER_URL = 'amqp://localhost//'
安装 celery 1 celery是一个python包所以可以通过pip直接安装
1 2 3 cd ~/user/myproject pipenv shell pipenv install celery
1 celery 3.1版本以后不需要再安装django-celery模块。
添加配置到 setting.py 末尾
1 2 3 4 5 CELERY_ACCEPT_CONTENT = ['pickle'] CELERY_TASK_SERIALIZER = 'pickle' CELERY_RESULT_SERIALIZER = 'pickle' # celery时区设置,使用settings中TIME_ZONE同样的时区 CELERY_TIMEZONE = TIME_ZONE
安装 django-celery-results 1 django-celery-results使用django orm提供结果。
安装 django-celery-restults
1 pip install django-celery-results
1 添加 django-celery-restults 到setting.py
1 2 3 4 INSTALLED_APPS = ( ..., 'django_celery_results', )
1 2 # celery结果返回 CELERY_RESULT_BACKEND = 'django-db'
安装 django-celery-beat 自定义调度程序类可以在命令行中指定(–scheduler 参数)。 默认调度程序是 celery.beat.PersistentScheduler,它只是跟踪本地搁置数据库文件中的最后一次运行时间。 还有一个 django-celery-beat 扩展,它将计划存储在 Django 数据库中,并提供了一个方便的管理界面来管理运行时的定期任务。 安装 django-celery-beat
1 pip install django-celery-beat
添加 django-celery-beat 到 setting.py
1 2 3 4 INSTALLED_APPS = ( ..., 'django_celery_beat', )
添加配置到 setting.py 末尾
1 2 # celery 定时任务 CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"
启动任务
1 celery -A proj beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
访问 Django 后台界面设置定期任务。
添加任务 新建一个项目
1 python manage.py startapp demoapp
添加 demoapp/tasks.py @shared_task 修饰器可以让你创建任务而不需要任何具体的应用程序实例
1 2 3 4 5 6 7 8 9 10 11 12 # Create your tasks here from __future__ import absolute_import, unicode_literals from celery import shared_task @shared_task def add(x, y): return x + y @shared_task def mul(x, y): return x * y @shared_task def xsum(numbers): return sum(numbers)
supervisor 配置 pip 安装 supervisor (建议用系统自带的 python2 进行安装,py3 不确定是否支持)
生成配置文件
1 echo_supervisord_conf > /etc/supervisord.conf
编辑配置文件,在末尾添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [program:celery.worker] command= myprojectenv/bin/celery -A myproject worker -l info directory=/home/user/myproject numprocs=1 autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/home/home/user/myproject/log/celery_worker_out.log [program:celery.beat] command= myprojectenv/bin/celery -A myproject beat -l info directory=/home/user/myproject numprocs=1 autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/home/home/user/myproject/log/celery_beat_out.log
启动 supervisor
1 supervisord -c supervisord.conf
至此,大功告成。 django 的配置可以按上一篇文章进行配置。 参考文件:http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html