Celery异步任务队列

一 celery实质

通过调用提前创建的进程和函数实现异步的任务

二 celery相关概念

任务执行者(worker):提取创建的进程,调用对应的函数来实现异步任务;
任务发出者:发送需要worker执行的任务函数的信息;
中间人(broker):任务队列,保存任务发出者发出的信息;

三 celery特点:

  1. 任务发出者、中间人和任务执行者可以在不同的电脑上;
  2. 发出的任务会进行排队,先添加到队列中的先执行;
  3. 任务发出者发出任务消息时,只是发出所要执行的任务的名字和参数,故worker任务执行者这一段需要有一份完整的代码;
    Celery异步任务队列_第1张图片

四 celery的使用

# 1. 安装celery
pip install celery

# 2. 创建celery_tasks文件夹,创建config配置文件和main文件

# 在config.py文件中配置中间人broker地址信息 - redis数据库信息
broker_url = "redis数据库地址信息"		# 例如 broker_url = "redis://127.0.0.1:6666/3"

# 在main.py文件中创建Celery对象并加载配置
from celery import Celery
celery_app = Celery("name")		# name为对象名,随意
celery_app.config_from_object("celery_tasks.config")		# 加载配置
celery_app.autodiscover_tasks(['celery_tasks.sms'])			# 调用autodiscover_tasks方法使work在启动时自动发现任务函数

# 3. 在celery_tasks文件夹下新建功能模块,例如想添加短信验证任务就新建mail文件夹,然后在文件夹下新建tasks.py,在tasks中定义任务函数
from celery_tasks.main import celery_app

@celery_app.task(name="send_sms_codes")
def send_sms_codes(a, b):
    print("OK %s, %s" % (a, b)

# 4. 启动worker工作进程(创建工作进程)
# 在Terminal中运行,且路径在celery_tasks的上一级,命令:celery -A celery对象所在文件 worker -l 日志级别
xxx/project$ celery -A celery_tasks.main worker -l info		# xxx/project$下运行ls命令可以看到celery_tasks选项即celery_tasks的上级

# 5. 在项目下的短信验证模块发出任务信息
from celery_tasks.sms.tasks import send_sms_codes
send_sms_codes.delay(*args)

你可能感兴趣的:(随笔)