1 Celery 与 Django项目最佳实践
- 在Django中使用celery时,celery文件必须以tasks.py
- Django会自动到每个APP中找tasks.py文件
pip3 install Django==2.0.4
pip3 install celery==4.3.0
pip3 install redis==3.2.1
pip3 install ipython==7.6.1 find ./ -type f | xargs sed -i 's/\r$//g' # 批量将当前文件夹下所有文件装换成unix格式celery multi start celery_test -A celery_test -l debug --autoscale=50,5 # celery并发数:最多50个,最少5个http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#cmdoption-celery-worker-autoscale
ps auxww|grep "celery worker"|grep -v grep|awk '{print $2}'|xargs kill -9 # 关闭所有celery进程
2 具体实施
2.1 目录操作
- 创建一个Django项目和 celery_test
2.2 celery.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import os
from celery import Celery
# 只要是想在自己的脚本中访问Django的数据库等文件就必须配置Django的环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celery_test.settings')
# app名字
app = Celery('celery_test')
# 配置celery
class Config:
BROKER_URL = 'redis://192.168.56.11:6379'
CELERY_RESULT_BACKEND = 'redis://192.168.56.11:6379'
app.config_from_object(Config)
# 到各个APP里自动发现tasks.py文件
app.autodiscover_tasks()
celery.py
2.3 __init__.py
- 在与项目同名的目录下的
__init__.py
文件中添加下面内容
# -*- coding:utf8 -*-
from __future__ import absolute_import, unicode_literals
# 告诉Django在启动时别忘了检测我的celery文件
from .celery import app as celery_ap
__all__ = ['celery_app']
__init__.py
2.4 tasks.py
# -*- coding:utf8 -*-
from __future__ import absolute_import, unicode_literals
from celery import shared_task
# 这里不再使用@app.task,而是用@shared_task,是指定可以在其他APP中也可以调用这个任务
@shared_task
def add(x, y):
return x + y
tasks.py
2.5 redis相关
- 在setings.py文件指定redis服务器的配置
CELERY_BROKER_URL = 'redis://localhost'
CELERY_RESULT_BACKEND = 'redis://localhost'
- 将celery_test这个Django项目拷贝到centos7.3的django_test文件夹中
- 保证启动了redis-server