【Python】Django2.0集成Celery4.1详解
2018-03-01 15:27
766 查看
环境准备
Python3.6pip install Django==2.0.1
pip install celery==4.1.0
pip install eventlet (加入协程支持)
安装erlang和rabbitMQ-server
配置settings.py文件
在settings.py文件中添加如下内容... LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672'
在settings.py同级目录创建celery.py
celery.py注意替换: project_name
# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals import os from celery import Celery # 设置环境变量 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings') # 注册Celery的APP app = Celery('project_name') # 绑定配置文件 app.config_from_object('django.conf:settings', namespace='CELERY') # 自动发现各个app下的tasks.py文件 app.autodiscover_tasks()
修改settings.py同级目录的init.py文件
from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ['celery_app']
在某个APP中创建tasks.py文件
tasks.py# -*- coding: utf-8 -*- from celery.task import task # 自定义要执行的task任务 @task def print_hello(): return 'hello celery and django...'
配置周期性任务或定时任务
再次编辑settings.py文件,添加如下内容定时任务的配置格式参考:http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html
from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { # 周期性任务 'task-one': { 'task': 'app.tasks.print_hello', 'schedule': 5.0, # 每5秒执行一次 # 'args': () }, # 定时任务 'task-two': { 'task': 'app.tasks.print_hello', 'schedule': crontab(minute=0, hour='*/3,10-19'), # 'args': () } }
启动worker和定时任务
启动worker (切换到manage.py同级目录下执行)celery -A project_name worker -l info -P eventlet
启动定时任务或周期性任务
celery -A project_name beat -l info
这里备注一下:最好使用supervisord来管理上面这2条命令
存放任务结果的扩展
pip install django-celery-results
Install APP
INSTALLED_APPS = ( ..., 'django_celery_results', )
生成数据库表:
python manage.py migrate django_celery_results
配置settings:
CELERY_RESULT_BACKEND = 'django-db'(用数据库存放任务执行结果信息)
相关文章推荐
- 【Python】Django集成Github登陆
- python3.6+django2.0开发一套学员管理系统
- 大新闻!Django 2.0 发布,不再支持 Python 2
- Professional Python Frameworks: Web 2.0 Programming with Django and Turbogears
- 【python3】 django2.0 在生成数据库表时报错: TypeError: __init__() missing 1 required positional argument: 'on_delete'
- Python Web开发-Django2.0学习04
- CentOS + Python3.6+ Django2.0 + uwsgi + nginx + mysql web发布环境搭建
- Python3+django2.0+apache2+ubuntu14部署网站上线的方法
- windows下安装apache2.2 + python2.7 + django(mod_wsgi集成)
- python3.4下django集成使用xadmin后台的方法
- redhat + apache2(httpd) + django2.0 + python3.6 搭建流程
- [python]Django集成Paypal支付小结
- 【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别
- python2.0_day18_django_admin
- 哇!Django 2.0 发布,不再支持 Python 2.x
- python3.5下django2.0使用pymysql连接mysql
- 【Python3】 使用django 2.0 + python3.6.4 创建应用
- Python Web开发-Django2.0学习01
- Python Web开发-Django2.0学习05