博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Django中使用celery整理
阅读量:5730 次
发布时间:2019-06-18

本文共 2273 字,大约阅读时间需要 7 分钟。

hot3.png

    上一片博客记录了如何入门级的使用celery,这里记录的是如何在Django框架中使用celery

快速开始

    首先假设你的Django项目是这样的

- proj/  - manage.py  - proj/    - __init__.py    - settings.py    - urls.py

然后在你的项目下面创建celery.py文件,proj/proj/celery.py,之后就可以在里面写你需要执行的task任务函数

from __future__ import absolute_import, unicode_literalsimport osfrom celery import Celery# 设置Django的settings目录os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')app = Celery('proj'             broker='amqp://',             backend='amqp://')# 这里声明的是和celery相关的配置命名必须是以CELERY开头的,这关于上一片博客的配置方法第三种app.config_from_object('django.conf:settings', namespace='CELERY')# 这里声明的是自动加载所有在django settings里面注册的app下面的tasks.pyapp.autodiscover_tasks()@app.task(bind=True)def debug_task(self):    print('Request: {0!r}'.format(self.request))

在第一行中的from __future__ import absolute_import, unicode_literals,是声明接下来的导入都是绝对路径的导入,防止在导入celery的时候出现冲突

之后就可以在你的proj/proj/__init__.py文件下面注册你的celery了

from __future__ import absolute_import, unicode_literals# This will make sure the app is always imported when# Django starts so that shared_task will use this app.from .celery import app as celery_app__all__ = ('celery_app',)

上面的英文意思是这确保了你的django启动的时候celery的app对象一直被导入状态,当你使用shared_task装饰器装饰的task函数的是就会使用这个app对象,接下来配合上面的app.autodiscover_tasks()一起说明,上面声明了app.autodiscover_tasks会加载所有app下所有的task,假设你的目录结构如下

- app1/    - tasks.py    - models.py- app2/    - tasks.py    - models.py

接下来你就可以使用shared_task,在tasks.py文件中

# Create your tasks herefrom __future__ import absolute_import, unicode_literalsfrom celery import shared_task@shared_taskdef add(x, y):    return x + y@shared_taskdef mul(x, y):    return x * y@shared_taskdef xsum(numbers):    return sum(numbers)

这个shared_task就确保了你的__init__.py下声明的celery_app就会在这里被使用,而不需要重复声明。

前台启动celery

celery worker -A proj -l info

后台启动celery

celery multi start w1 -A proj -l info

重启

celery  multi restart w1 -A proj -l info

停止

celery multi stop w1 -A proj -l info

补充

你除了可以用redis作为celery的代理之外还可以使用django自带的orm/cache

首先安装拓展

pip install django-celery-results

在Django设置的installed下面添加

INSTALLED_APPS = (    ...,    'django_celery_results',)

执行

python manage.py migrate celery_results

如果你使用了django的settings作为celery配置文件

添加

CELERY_RESULT_BACKEND = 'django-db'

CELERY_CACHE_BACKEND = 'django-cache'

 

转载于:https://my.oschina.net/u/3640109/blog/3052245

你可能感兴趣的文章
【云吞铺子之专家来了】CDN的HTTPS相关问题及处理思路
查看>>
程序实例---栈的顺序实现和链式实现
查看>>
服务的使用
查看>>
Oracle 用户与模式
查看>>
网站开发流程以及HTML5简介(八)
查看>>
MairDB 初始数据库与表 (二)
查看>>
RabbitMQ】三种Exchange模式——订阅、路由、通配符模式
查看>>
连接数据库——java
查看>>
拥在怀里
查看>>
chm文件打开,有目录无内容
查看>>
whereis、find、which、locate的区别
查看>>
TRUNK
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
MDT 2013 从入门到精通之软件自动化部署设置
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
桌面支持--outlook取消收件规则1
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
儿呀,娘想做你家的一条狗
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>