Celery之django-celery

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

  • 在与项目同名的目录下创建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

  • 创建 app01/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
posted @ 2020-12-09 10:33  狐狸大大爱吃糖  阅读(153)  评论(0编辑  收藏  举报