Celery 是一个简单、灵活且可靠的,处理大量消息的 分布式系统。
专注于实时处理的 异步任务队列。
同时也支持 任务调度。
1.安装
pip install Django-celery==3.3.1 # django3以上的需要安装
pip install Django-celery==3.2.2 # django2
pip install Django-redis
pip install redis==2.10.6
# 如果redis版本过高后面会出现错误下面这个
#'str' object has no attribute 'items' (ven)
pip install celery==4.4.7 # python3.9
如果是python3.6 安装pip install celery==4.2.1
2.setting.py配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
# 异步
'djcelery',
]
3.在settings.py同级下创建celery.py和tasks.py
celery:celery的配置
tasks:异步任务
celery.py
from celery import Celery, platforms
from django.conf import settings
import os
# 设置celery的默认工作目录
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xxxxx.settings")
# 启动celery项目(要加入broker,如果用的是redis的话,不然默认开启的是rabbitmq-server)
app = Celery(broker='redis://localhost:6379/3')
# 项目加载配置
app.config_from_object("django.conf:settings")
# 加载djcelery
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
# 支持以root启动
platforms.C_FORCE_ROOT = True
tsaks.py
from celery import task
import time
@task
def task1():
"""无参方法"""
print("task1...begin...")
time.sleep(10) # 模拟耗时操作
print("task1...end...")
@task
def task2(a, b):
"""有参方法"""
print("task2...begin...a={},b={}".format(a, b))
time.sleep(10) # 模拟耗时操作
print("task2...end...")
return a +