标签:set 分布式 false png lang imp window 中间件 中间
celery
前文已知,celery可以执行异步任务、延时任务、定时任务。
broker:‘redis://127.0.0.1:6379/2‘ # 消息队列(中间件)
broker 可以使用Redis、RabbitMQ
backend:‘redis://127.0.0.1:6379/3‘ # 任务结果仓库
celery_task
的目录结构# 在项目根目录下新建celery_task文件
# 目录结构如下:
-celery_task
-celery.py # celery_task包下面必须有个名为celery的py文件
-task_3.py # 任务
-__init__.py
celery.py
在django
中如何使用celery
django
和celery
是两个独立的框架体系,如何在django
中使用celery执行定时任务,或者异步任务了
# 分布式异步框架celery的配置
# 加载django配置环境
import os
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘luffyapi.settings.dev‘)
# 加载celery配置环境
from celery import Celery
# broker&backend&worker
broker = ‘redis://127.0.0.1:6379/2‘
backend = ‘redis://127.0.0.1:6379/3‘
app = Celery(__name__, broker=broker, backend=backend, include=[‘celery_task.task_3‘, ]) # worker
# 时区设置,是否启用UTC
app.conf.timezone = ‘Asia/Shanghai‘
app.conf.enable_utc = False
# 定时任务的配置
from datetime import timedelta
app.conf.beat_schedule = {
‘add-task‘: {
‘task‘: ‘celery_task.task_3.flush_banner‘,
‘schedule‘: timedelta(seconds=60),
# ‘schedule‘: crontab(hour=8, day_of_week=1), # 每周一早八点
# ‘args‘: (log_path, new_path),
}
}
task_3.py
from .celery import app
from django.core.cache import cache
from home import models,serializer
from django.conf import settings
@app.task
def flush_banner_cache():
queryset = models.Banner.objects.filter(is_delete=False, is_show=True).order_by(‘order‘)[
:settings.BANNER_COUNTER]
banner_list = serializer.BannerModelSerializer(queryset, many=True).data
for banner in banner_list:
banner[‘img‘] = ‘http://127.0.0.1:8015/%(url)s‘ % {‘url‘: banner[‘img‘]}
cache.set(settings.BANNER_LIST_CACHE, banner_list,60)
执行定时任务:
windows下启动worker
# 启动worker
celery worker -A celery_task -l info -P eventlet
# 添加任务
celery beat -A celery_task -l info
展示效果:
修改数据库,将原先删除的图片恢复,一分后,展示效果如下:
这里只是做轮播图的定时更新,在实际的开发场景中,需要后台一修改,就起个异步任务更新缓存
标签:set 分布式 false png lang imp window 中间件 中间
原文地址:https://www.cnblogs.com/surpass123/p/13386967.html