1. 首页
  2. 未分类

Celery在Django中的使用介绍

“u003Cdivu003Eu003Cpu003Eu003Cstrongu003ECelery简介u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Ecelery是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必须工具。u003Cu002Fpu003Eu003Cpu003E它是一个专注于实时处理的任务队列,同时也支持任务调度。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E何为任务队列u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E任务队列:是一种在线程和机器间分发任务的机制。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fd1e98afc1aa44a5b832f0d8050e8e4bc” img_width=”612″ img_height=”409″ alt=”Celery在Django中的使用介绍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003Ecelery的三大组成部分u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Eworkeru003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E任务执行单元–>Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Ebroker(存tasks的仓库)u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E消息中间件–> Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Ebackend (存results的仓库)u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eask result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F6fe1ab5f27024f159893519c2aaccc1e” img_width=”365″ img_height=”326″ alt=”Celery在Django中的使用介绍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E使用场景u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Culu003Eu003Cliu003E异步任务:将耗时操作任务提交给celery去异步执行,比如发送短信、邮件,消息推送、音视频处理等。u003Cu002Fliu003Eu003Cliu003E定时任务:定时执行某件事情,比如每天数据统计u003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cstrongu003E基本命令u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003E# 1. 启动celery服务:u003Cbru003E# 非windows:u003Cbru003E# 指令:celery worker -A celery_task(celery项目文件) -l infou003Cbru003E# windows: 需要先下载eventlet模块,pip install eventletu003Cbru003E# 指令: celery worker -A celery_task -l info -P eventletu003Cbru003E# 2. 添加任务:手动添加,需要自定义添加任务脚本;自动添加任务,在celery.py中配置u003Cbru003E# 3. 获取结构:手动获取,需要自定义任务脚本u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003Ecelery在Django项目中的使用u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Ecelery目录结构u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Eprojectu003Cbru003E |—celery_tasku003Cbru003E |—celery.py # celery连接和相关配置,且名字必须是celery.py,如果要自动添加任务,那么相 关配置也在celery.py里配置;u003Cbru003E |—tasks.py # 所有任务函数u003Cbru003E |—add_task.py # 手动添加任务:立即任务,延时任务,定时任务;u003Cbru003E |—get_result.py # 获取结果u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E后面两个文件可以不用添加,看需求来。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F61aadda0bc204beb80e2eea2ef949d3a” img_width=”494″ img_height=”448″ alt=”Celery在Django中的使用介绍” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E使用u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Ecelery.pyu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Efrom celery import Celeryu003Cbru003E# 导入时间相关包,用法看下面u003Cbru003Efrom datetime import timedeltau003Cbru003Efrom celery.schedules import crontabu003Cbru003E# 因为需要调用Django项目中的models,所有需要添加Django环境u003Cbru003Eimport os,djangou003Cbru003Eos.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘bookapi.settings.dev’)u003Cbru003Edjango.setup()u003Cbru003E# 添加任务的仓库,这里使用了Redisu003Cbru003Ebroker = “redis:u002Fu002F127.0.0.1:6379u002F11″u003Cbru003E# 接收处理结果的仓库u003Cbru003Ebackend = “redis:u002Fu002F127.0.0.1:6379u002F12″u003Cbru003E# 指定需要处理的任务u003Cbru003Einclude = [‘celery_task.tasks’]u003Cbru003Eapp = Celery(broker=broker,backend=backend,include=include)u003Cbru003E# 配置任务时区u003Cbru003Eapp.conf.timezone = ‘Asiau002FShanghai’u003Cbru003Eapp.conf.enable_utc = Falseu003Cbru003E# 配置定时任务u003Cbru003Eapp.conf.beat_schedule = {u003Cbru003E ‘recommend-task’: {u003Cbru003E ‘task’: ‘celery_task.tasks.recommend_num’,u003Cbru003E # ‘schedule’: timedelta(seconds=20),u003Cbru003E ‘schedule’: crontab(hour=24), u003Cbru003E ‘args’: ()u003Cbru003E },u003Cbru003E ‘monthly-task’: {u003Cbru003E ‘task’: ‘celery_task.tasks.monthly_num’,u003Cbru003E # ‘schedule’: timedelta(seconds=60),u003Cbru003E ‘schedule’: crontab(day_of_month=1,hour=0),u003Cbru003E ‘args’: ()u003Cbru003E }u003Cbru003E}u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003Etasks.pyu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Efrom .celery import appu003Cbru003Efrom bookapi.apps.user import modelsu003Cbru003E@app.tasku003Cbru003Edef recommend_num():u003Cbru003E user_list = models.User.objects.all()u003Cbru003E # print(user_list) ## <QuerySet [<User: admin>, <User: 18700022899>]>u003Cbru003E for user in user_list:u003Cbru003E models.User.objects.filter(username=user.username).update(recommend_nums=3)u003Cbru003E@app.tasku003Cbru003Edef monthly_num():u003Cbru003E user_list = models.User.objects.all()u003Cbru003E # print(user_list) ## <QuerySet [<User: admin>, <User: 18700022899>]>u003Cbru003E for user in user_list:u003Cbru003E models.User.objects.filter(username=user.username).update(monthly_nums=2)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E最后,小编想说:我是一名python开发工程师,整理了一套最新的python系统学习教程,想要这些资料的可以关注私信小编“01”即可,希望能对你有所帮助u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:Celery在Django中的使用介绍

主题测试文章,只做测试使用。发布者:熱鬧獨處,转转请注明出处:http://www.cxybcw.com/18133.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code