Django celery6.4

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

celery

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

名词

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

使用

  • 安装包

      celery==3.1.25
      celery-with-redis==3.0
      django-celery==3.1.17
  
 
  • 配置settings

      INSTALLED_APPS = (
       ...
       'djcelery',
      }
      ...
      import djcelery
      djcelery.setup_loader()
      BROKER_URL = 'redis://127.0.0.1:6379/0'
      CELERY_IMPORTS = ('应用名称.task')
  
 
  • 在应用目录下创建task.py文件

      import time
      from celery import task
      @task
      def sayhello():
          print('hello ...')
          time.sleep(2)
          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)

 
  • 使用代码

      #from task import *
      def sayhello(request):
          print('hello ...')
         import time
          time.sleep(10)
          print('world ...')
         # sayhello.delay()
         return HttpResponse("hello world")
  
 

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

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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