Django框架上使用Celery异步执行任务

xiaoxiao2022-06-12  41

使用Django框架编程时, 由于框架的封装限制,在没有编写底层代码的情况下,要把一段代码放到一个新的进程里去运行,我们就会使用异步执行任务的包Celery。 虚拟环境安装celery

pip install celery

一般把耗时的函数放在任务之中去执行,以发送短信为例: 概念: 任务task:一个耗时的函数,开发人员封装的函数,定义了耗时的代码 队列queue:存储任务的地方,如redis,保存要执行的函数的名称 代理人broker:接收通知,将任务加入队列→调用者,任务函数.delay() 工人worker:从队列中读取任务,执行。对应一个新的进程

使用celery发短信例子步骤: 创建一个celery_task包用来编写异步模块,再在该此包下创建一个config.py文件和一个main.py文件,文件目录结构如下

1.配置config,main文件

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([ ])

2.自定义任务

创建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' ])

3.调用

函数.delay(参数)

send_sms.delay(mobile)

4.启动工人

celery -A celery_tasks.main worker -l info
转载请注明原文地址: https://www.6miu.com/read-4932708.html

最新回复(0)