使用Django框架编程时, 由于框架的封装限制,在没有编写底层代码的情况下,要把一段代码放到一个新的进程里去运行,我们就会使用异步执行任务的包Celery。 虚拟环境安装celery
pip install celery一般把耗时的函数放在任务之中去执行,以发送短信为例: 概念: 任务task:一个耗时的函数,开发人员封装的函数,定义了耗时的代码 队列queue:存储任务的地方,如redis,保存要执行的函数的名称 代理人broker:接收通知,将任务加入队列→调用者,任务函数.delay() 工人worker:从队列中读取任务,执行。对应一个新的进程
使用celery发短信例子步骤: 创建一个celery_task包用来编写异步模块,再在该此包下创建一个config.py文件和一个main.py文件,文件目录结构如下
config.py配置如下
broker_url='redis://127.0.0.1:6379/15'main.py配置如下
from celery import Celery # 为celery使用django配置文件进行设置 import os if not os.getenv('DJANGO_SETTINGS_MODULE'): os.environ['DJANGO_SETTINGS_MODULE'] = 'sms.setting' # 项目的setting配置路径,根据自己项目的实际配置路径更改 # 创建celery应用 app = Celery('sms') # 导入celery配置 app.config_from_object('celery_tasks.config') # 自动注册celery任务,即自己编写的tasks.py里的函数 app.autodiscover_tasks([ ])创建sms包(为解耦之后的其他耗时模块,都用独立的包来编写各自的逻辑) 创建tasks.py 注意:固定只能取名tasks 定义函数 添加装饰器@app.task
from celery_tasks.main import app @app.task def send_sms(mobile): pass回过头来,在main.py注册列表里添加自己所写的函数,用于自动识别任务
··· app.autodiscover_tasks([ 'send_sms' ])函数.delay(参数)
send_sms.delay(mobile)