Django异步任务之Celery的基本使用
框架(架构)  /  管理员 发布于 7年前   170
Celery
许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, 使用Celery是一个比较好的选择, 因为Celery有着大量的社区支持, 能够完美的扩展, 和Django结合的也很好. Celery不仅能在Django中使用, 还能在其他地方被大量的使用. 因此一旦学会使用Celery, 我们可以很方便的在其他项目中使用它.
celery 是一个用于实现异步任务的库, 在很多项目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在实现 http request请求返回 view 前做一些我们想做的而且耗时的事情而不会让用户等待太久
环境
django 版本 == 1.11.6
celery 版本 == 3.1.25
安装
pip install django-celerypip install celery
首先需要将 celery 添加到 django 项目的 settings 里, celery 任务和 django 需要一个 中间人(broker),,这里使用的是 django 自带的 broker, 但在生产中一般使用 rabbitmq, Redis 等,在 INSTALLED_APP 中需要添加 djcelery 和 kombu.transport.django, 还有 app 应用。
- project/project/ settings.py:
import djcelerydjcelery.setup_loader() BROKER_URL = 'django://'INSTALLED_APP = ( ... 'app' 'djcelery', 'kombu.transport.django',)
新建 celery.py 创建一个 celery 应用,并添加以下内容
- project/project/ celery.py:
# 相对路径导入, 防止导入 celery 时冲突from __future__ import absolute_importimport osfrom celery import Celeryfrom django.conf import settings# 让 celery 能找到 django 项目os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')# 创建一个 celery 应用app = Celery('project')# 导入配置app.config_from_object('django.conf:settings')# 自动发现 taskapp.autodiscover_tasks(lambda: settings.INSTALLED_APPS)@app.task(bind=True)def debug_task(self): print('Request: {0!r}'.format(self.request))
- project/project/ __init__.py:
from __future__ import absolute_import# 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
在 django app 中添加任务,文件名必须是 tasks.py, 在普通 python 函数前加一个 @task() 装饰器就变成了 celery task
-project/app/ tasks.py:
from celery.task import taskfrom time import sleep@task()def helloWorld(): print 'helloWorld' sleep(10) print 'helloWorld' return 'helloCelery'
这样,一个任务就创建成功了,只剩下在 view 中调用了
-project/app view.py:
from tasks.py import helloWorlddef home(): helloWorld.delay() return HttpResponse('helloCelery')
最后
python manage.py migrate
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对AIDI的支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号