经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django异步任务之Celery的基本使用
来源:jb51  时间:2019/3/25 8:59:10  对本文有异议

Celery

许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, 使用Celery是一个比较好的选择, 因为Celery有着大量的社区支持, 能够完美的扩展, 和Django结合的也很好. Celery不仅能在Django中使用, 还能在其他地方被大量的使用. 因此一旦学会使用Celery, 我们可以很方便的在其他项目中使用它.

celery 是一个用于实现异步任务的库, 在很多项目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在实现 http request请求返回 view 前做一些我们想做的而且耗时的事情而不会让用户等待太久

环境

django 版本 == 1.11.6

celery 版本 == 3.1.25

安装

  1. pip install django-celery
  2. pip install celery

首先需要将 celery 添加到 django 项目的 settings 里, celery 任务和 django 需要一个 中间人(broker),,这里使用的是 django 自带的 broker, 但在生产中一般使用 rabbitmq, Redis 等,在 INSTALLED_APP 中需要添加 djcelery 和 kombu.transport.django, 还有 app 应用。

- project/project/ settings.py:

  1. import djcelery
  2.  
  3. djcelery.setup_loader()
  4. BROKER_URL = 'django://'
  5.  
  6. INSTALLED_APP = (
  7. ...
  8. 'app'
  9. 'djcelery',
  10. 'kombu.transport.django',
  11. )

新建 celery.py 创建一个 celery 应用,并添加以下内容

- project/project/ celery.py:

  1. # 相对路径导入, 防止导入 celery 时冲突
  2. from __future__ import absolute_import
  3. import os
  4. from celery import Celery
  5. from django.conf import settings
  6.  
  7. # 让 celery 能找到 django 项目
  8. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
  9. # 创建一个 celery 应用
  10. app = Celery('project')
  11.  
  12. # 导入配置
  13. app.config_from_object('django.conf:settings')
  14. # 自动发现 task
  15. app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
  16.  
  17. @app.task(bind=True)
  18. def debug_task(self):
  19.  
  20. print('Request: {0!r}'.format(self.request))

 

- project/project/ __init__.py:

  1. from __future__ import absolute_import
  2.  
  3. # This will make sure the app is always imported when
  4. # Django starts so that shared_task will use this app.
  5. from .celery import app as celery_app

在 django app 中添加任务,文件名必须是 tasks.py, 在普通 python 函数前加一个 @task() 装饰器就变成了 celery task

-project/app/ tasks.py:

  1. from celery.task import task
  2. from time import sleep
  3.  
  4. @task()
  5. def helloWorld():
  6. print 'helloWorld'
  7. sleep(10)
  8. print 'helloWorld'
  9. return 'helloCelery'

这样,一个任务就创建成功了,只剩下在 view 中调用了

-project/app view.py:

  1. from tasks.py import helloWorld
  2.  
  3. def home():
  4.  
  5. helloWorld.delay()
  6.  
  7. return HttpResponse('helloCelery')

最后

  1. python manage.py migrate

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号