环境说明:
- win10
- celery==4.4.2 分布式任务队列、实现异步与定时
- Django==2.2.5
- django-celery-beat==2.0.0 实现定时任务的动态操作(添加/删除)等,此插件本质是对数据库表变化做 检查,一旦有数据库表改变,调度器重新读取任务进行调度
- eventlet==0.25.2 windows下运行worker需要这个库
- flower==0.9.4 可以监控任务、worker、队列的情况
- redis==3.5.2 此次用redis做broker和result backend
总体描述:
- 利用celery实现分布式部署,主机器分发任务,不同机器上worker接收;
- 至少需要两台机器进行模拟(一台机器上开不同的终端模拟多台机器也可以)
主机器A:django、django-celery-beat、celery 负责分发任务
从机器B:celery 做worker机器,监听任务队列,接收主机发送的任务消息,执行相应的任务
borker:此次用redis,可用任意一台机器做broker,A或B或其他都可以
- 结合django-celery-beat,利用django的orm模型操作sqlite3中django-celery-beat生成的表,实现任务、队列的动态设置
主机器A的目录结构:这里暂时不涉及django web服务,urls.py views.py可不要
一、简单应用
(1)__init__.py
from celerytest.celery import app as celery_app
# 使得django启动时加载celery的app
__all__ = ('celery_app',)
(2)celery.py 创建celery实例
'''
通过from future import absolute_import来声明使用绝对引用,这样是为了下面的from celery import Celery引用的是系统celery模块,而不是我们自己创建的celery.py
'''
from __future__ import absolute_import, unicode_literals
from celery import Celery
import os
import celerytest.celeryconfig
#from django.utils import timezone
# 为celery指定DJANGO_SETTINGS_MODULE环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celerytest.settings')
# 创建celery的实例app,要在指定DJANGO_SETTINGS_MODULE环境变量之后
app = Celery('tasks')
# app = Celery('tasks', broker=CELERY_BROKER_URL, backend=CELERY_RESULT_BACKEND)
app.config_from_object('celerytest.celeryconfig', namespace='CELERY') # 命名空间 namespace='CELERY'定义所有与celery相关的配置的键名