Celery + Django +Redis设置异步任务
环境
Python 3.7.2
Django==3.0.7
celery==4.4.7
Redis==3.2.
windows10
配置
setting.py
# celery设置
CELERY_TIMEZONE = 'Asia/Shanghai' # 与TIME_ZONE应该一致
BROKER_URL = 'redis://127.0.0.1:6379' # 最好为IP,否则容易出BUG
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
__init__.py
from __future__ import absolute_import #此项必须在第一行
from .celery import app as celery_app
celery.py
----此文件与setting.py
在同一目录下
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# 注意替换项目名 此次项目名为shopsite
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'shopsite.settings')
app = Celery('shopsite') # 注意替换项目名
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
task.py
----在相应对应的app目录下
from time import sleep
from shopsite.celery import app
@app.task
def task_test(a, b): # 需要异步执行的函数
print("start celery....")
sleep(5)
print(a + b)
print('end celery......')
views.py
----app下的视图函数
def test_celery(request):
task_test.delay(3, 5)
return HttpResponse('aaaa')
url配置略
启动
# 启动redis (cmd1)
# 启动Django
python manage.py runserver
#启动celery
celery -A shopsite worker -l info #注意:此处执行的目录与启动Django目录一样
注:在windows下启动celery可能报错:Celery ValueError: not enough values to unpack (expected 3, got 0)
解决:
# 安装eventlet pip install eventlet # 再启动 celery -A shopsite worker -l info -P eventlet