接外包,有相关需求的可以联系我:Telegram | Email

如何在Django中使用Celery?

该文章创建(更新)于06/15/2022,请注意文章的时效性!

最近写了一个Django项目,碰巧有个数据获取的功能延迟特别大(30s左右),严重影响用户的浏览体验,就想到了去尝试用celery解决。怎么说呢?会者不难,难者不会。这东西最初感觉挺简单的,搞了两天各种error,就找了一个视频系统的学习了一下,emmm还是有error。我这里主要是想通过Model来存数据,各种class引用报错,如果还不能解决的话都想过直接操作MySQL来写库了。

使用

我这里主要先说一下一个文件的使用方式吧,当然也可以搞一个类把task和配置文件等等分开尽量解耦,后续维护更方便。消息中间件选用的是Redis,当然你也可以选用mq等等。

  • models.py 同目录创建celery_task.py,我这里主要是一个异步,定时任务的话也差不多。内容如下,主要注意的是django的引用以及models的引用。
from celery import Celery  
import time  
import os  
import django  

# 注意Project换成自己的项目名称
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Project.settings')  
django.setup()  
from test.models import article  

backend='redis://127.0.0.1:6379/1'  # 数据库存储异步结果  
broker='redis://127.0.0.1:6379/2'   # 消息中间件(0-16个,其中选一个)  
# rabbitmq + celery5.1.2
# backend='rpc://[email protected]//'
# broker='pyamqp://[email protected]//'

cel=Celery('test',backend=backend,broker=broker) # ’test‘ celery的一个名字  

@cel.task()  
def getcontent():  
    article.objects.create(description ="description", content = "content")
  • views.py
from .celery_task import getcontent
def IndexView(request):  
    # 用celery  
    getcontent.delay() 
    return render(request, 'test/index.html')
  • 在项目路径下启动,这里主要注意一下celery5.x的启动方式以及gevent的参数以及module安装。
#celery5.x 启动
#celery --app test.celery_task worker -l info -P gevent
celery worker -A test.celery_task -l info -P gevent

参考



👇 Share | 分享 👇


要不赞赏一下?

微信
支付宝
PayPal
Bitcoin

版权声明 | Copyright

除非特别说明,本博客所有作品均采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明转自-
https://www.emperinter.info/2022/06/15/how-to-use-celery-in-django/


要不聊聊?

我相信你准备留下的内容是经过思考的!【勾选防爬虫,未勾选无法留言】

*

*



微信公众号

👉 NewsLetter ❤️ 邮箱订阅 👈

优惠码


阿里云国际版20美元
Vultr10美元
搬瓦工 | Bandwagon应该有折扣吧?
域名 | namesiloemperinter(1美元)