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

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

pip install celery

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

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

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

猜你喜欢

转载自blog.csdn.net/Best_fish/article/details/83317717