Django celery6.4

举报
Lansonli 发表于 2021/09/27 23:43:08 2021/09/27
【摘要】 celery 官方网站中文文档示例一:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验示例二:网站每小时需要同步一次天气预报信息,但是http是请求触发的,难道要一小时请求一次吗?使用celery后,情况就不一样了示例一的解决:将耗时的程序...

celery

  • 官方网站
  • 中文文档
  • 示例一:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验
  • 示例二:网站每小时需要同步一次天气预报信息,但是http是请求触发的,难道要一小时请求一次吗?
  • 使用celery后,情况就不一样了
  • 示例一的解决:将耗时的程序放到celery中执行
  • 示例二的解决:使用celery定时执行

名词

  • 任务task:就是一个Python函数
  • 队列queue:将需要执行的任务加入到队列中
  • 工人worker:在一个新进程中,负责执行队列中的任务
  • 代理人broker:负责调度,在布置环境中使用redis

使用

  • 安装包

  
  1. celery==3.1.25
  2. celery-with-redis==3.0
  3. django-celery==3.1.17
  • 配置settings

  
  1. INSTALLED_APPS = (
  2. ...
  3. 'djcelery',
  4. }
  5. ...
  6. import djcelery
  7. djcelery.setup_loader()
  8. BROKER_URL = 'redis://127.0.0.1:6379/0'
  9. CELERY_IMPORTS = ('应用名称.task')
  • 在应用目录下创建task.py文件

  
  1. import time
  2. from celery import task
  3. @task
  4. def sayhello():
  5. print('hello ...')
  6. time.sleep(2)
  7. print('world ...')
  • 迁移,生成celery需要的数据表
python manage.py migrate

 
  • 启动Redis
sudo redis-server /etc/redis/redis.conf

 
  • 启动worker
python manage.py celery worker --loglevel=info

 
  • 调用语法
function.delay(parameters)

 
  • 使用代码

  
  1. #from task import *
  2. def sayhello(request):
  3. print('hello ...')
  4. import time
  5. time.sleep(10)
  6. print('world ...')
  7. # sayhello.delay()
  8. return HttpResponse("hello world")

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/102651711

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。