django + celery + supervisor 定时任务 + 部署

0 views

环境

django 2.0.6 (上一篇文章有详细项目新建的描述)
celery 4.2.0
django-celery-beat 1.1.1
django-celery-results 1.0.1

安装配置celery

选择broker

我选择了RabbitMQ(官方推荐,安装配置简单) [了解更多](http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#choosing-a-broker)
安装RabbitMQ
sudo apt-get install rabbitmq-server

添加配置到setting.py末尾

# celery broker
BROKER_URL = 'amqp://localhost//'

安装celery

celery是一个python包所以可以通过pip直接安装
cd ~/user/myproject
pipenv shell
pipenv install celery 
celery 3.1版本以后不需要再安装django-celery模块。 添加配置到setting.py末尾

CELERY_ACCEPT_CONTENT = ['pickle']
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'

# celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = TIME_ZONE

安装django-celery-results

django-celery-results使用django orm提供结果。 安装 django-celery-restults
pip install django-celery-results

添加 django-celery-restults 到setting.py
INSTALLED_APPS = (
    ...,
    'django_celery_results',
)
添加配置到setting.py末尾
# celery结果返回
CELERY_RESULT_BACKEND = 'django-db'

安装django-celery-beat

自定义调度程序类可以在命令行中指定(–scheduler参数)。

默认调度程序是celery.beat.PersistentScheduler,它只是跟踪本地搁置数据库文件中的最后一次运行时间。

还有一个django-celery-beat扩展,它将计划存储在Django数据库中,并提供了一个方便的管理界面来管理运行时的定期任务。

安装 django-celery-beat

pip install django-celery-beat

添加 django-celery-beat 到setting.py

INSTALLED_APPS = (
    ...,
    'django_celery_beat',
)

添加配置到setting.py末尾

# celery 定时任务
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"

启动任务

celery -A proj beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

访问Django后台界面设置定期任务。

添加任务

新建一个项目

python manage.py startapp demoapp

添加demoapp/tasks.py @shared_task修饰器可以让你创建任务而不需要任何具体的应用程序实例

# 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不确定是否支持)

pip install supervisor

生成配置文件

echo_supervisord_conf > /etc/supervisord.conf

编辑配置文件,在末尾添加

[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

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

PREVIOUSdjango Translation 实现中英文切换
NEXTdjango + gunicorn + nginx 部署