首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python3.7.2+Django2.0.4 使用django-celery遇到的那些坑

python3.7.2+Django2.0.4 使用django-celery遇到的那些坑

作者头像
用户9127725
发布2022-08-08 09:25:25
发布2022-08-08 09:25:25
6070
举报

  1 首先为啥要用celery

  因为在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务。与此同时,celery除了异步任务,还可以开启定时任务,方便调度。

  2 安装需要的软件包

代码语言:javascript
复制
pip install celery

pip install celery-with-redis

pip install django-celery

  3 因为async这个单词在python3.7中已经作为系统关键字存在了,所以要把所有涉及到这个关键字的文件都要改掉,涉及的文件列表包含但不限于:

代码语言:javascript
复制
/kombu/async

/celery/utils/timer2.py

/concurrency/asynpool.py

/kombu/transport/redis.py

/celery/worker/auto_scale.py,components,consumer,strategy

  4 配置settings.py

代码语言:javascript
复制
INSTALLED_APPS = (
   ...
   'djcelery',
  }
# 末尾初始化
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_IMPORTS = ('应用名称.task')

  5 新增task.py

代码语言:javascript
复制
#导入异步任务
from celery.task import task
#导入定时任务库
from celery.decorators import periodic_task
  
#利用参数来设置任务周期
@periodic_task(run_every=10)
def some_task():
    print('每10秒执行一次')
    time.sleep(5)
    print('执行完毕')
    return True

#通过装饰器来注册异步任务
@task
def task_mail():
    #实例化一个对象
    sendmail = SendMail('欢迎注册','您的验证码是1324',   ['599954144@qq.com'],DEFAULT_FROM_EMAIL)
    status = sendmail.do_send_mail()
    if status:
        print('发送邮件成功')
    else:
        print('发送邮件失败')

  6 新增celery.py

代码语言:javascript
复制
import os
import django
from celery import Celery
from django.conf import settings 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mymac.settings')
django.setup()
app = Celery('mymac')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

  7 启动服务

代码语言:javascript
复制
#异步服务
celery -A mymac worker -l info  
#定时任务服务
celery -A myproject beat -l info

  8 但是执行异步任务的时候发现服务自动断掉,是因为python库里的redis版本太高了。。。所以通过pip卸载,然后指定安装低版本2.6.10

代码语言:javascript
复制
pip uninstall redis
pip install redis==2.6.10
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档