django使用celery运行异步任务和定时任务

1 settings.py文件配置

本人使用的是redis为broker,可以直接通过
pip install django-celery

BROKER_URL = 'redis://127.0.0.1:6379/0'
BROKER_TRANSPORT = 'redis'

2 创建celery.py文件(假设项目名为project)

在该项目settings的同级目录下新建celery.py文件

from __future__ import absolute_import #必须写在第一行,否则报错
from celery.schedules import crontab
import os
from celery import Celery, platforms
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'weiyou.settings')

app = Celery('weiyou', backend='redis', broker='redis://localhost')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

platforms.C_FORCE_ROOT = True

3 导入celery文件

在/project/project/init.py我们加入

from __future__ import absolute_import

from .celery import app as celery_app

__all__ = ['celery_app']

4 用celery装饰我们需要运行的异步函数

在project项目的我们需要执行异步任务的app下新建tasks.py文件

from project import celery_app
import time 
@celery_app.task
def hello():
    time.sleep(10)
    

5 在views文件中使用

from .tasks import hello
def sock(request):
    hello.delay()

6 启动celery

在终端运行,关闭终端celery就会停止运行(可用于调试)

celery -A project worker -l info

在终端manage同级目录下输入如下语句,可在后台运行

celery multi start w1 -A project -l info

w1为你为进程起的名字,需记住,以方便重启和结束进程

7 关闭和重启celery

celery multi stop w1   # 结束w1进程
celery multi restart w1 -A project -l info      # 重启worker进程
celery status -A project       # 查看该项目运行的进程数

运行过程中出现的几个错误及解决方式:
  bash:celery command not found:查看/usr/bin的确没有celery,最后发现celery安装在/usr/local/python-3.5.2/bin/目录下,而$PATH中不包括该目录,所以shell找不到celery命令,建立一个软连接就好了:sudo ln -s /usr/local/python-3.5.2/bin/celery /usr/bin/celery
  AttributeError  “‘float’ object has no attribute ‘items’” :参考https://github.com/celery/celery/issues/5175发现原因,由于celery和redis 3.0版本兼容问题,需要回滚redis版本:pip install redis==2.10.6 (查看redis版本:pip show redis;)

你可能感兴趣的:(Django,服务器部署)