2018-07-04(Celery)

Celery(异步任务队列)


1、Celery三个概念

1)任务发出者:任务发出者就是发出要执行任务的函数;

2)中间人(broker):任务队列;建议以下两种:RabbitMQ,redis;

3)任务执行者(worker):任务就是进程、协程(不支持线程)。

其执行过程为,任务发出者发出任务至队列,队列的特点即对队列中的任务进行排队(同步),任务执行者监听任务队列,取出任务执行。

2、celery特点

celery中的任务者,中间人,和任务执行者可以在不同电脑上,因为任务发出者,任务执行者通过中间人进行通讯。

3、celery使用

1)定义任务函数;

2)启动worker;

  1. 发送任务;

4、Demo

创建以下目录

2018-07-04(Celery)_第1张图片
目录

celery_tasks/main.py

from celery import Celery

# 创建一个Celery对象
# celery_app = Celery('celery_tasks', broker='中间人地址')
celery_app = Celery('celery_tasks')

# 加载配置
celery_app.config_from_object('celery_tasks.config')

# 让celery自动发现任务
# autodiscover_tasks会自动搜寻路径下的文件,路径目录命名随意,但是存放任务的文件一定命名为tasks.py才会自动发现
celery_app.autodiscover_tasks(['celery_tasks.tasks'])

celery_tasks/config.py

from celery_tasks.main import celery_app


# 定义任务的函数
# 用celery_app装饰函数使其成为celery任务,name为任务名字
@celery_app.task(name='my_celery_task')
def task1(a, b):
    print('任务函数执行,a:%s,b:%s' % (a, b))

celery_tasks/tasks/tasks.py

from celery_tasks.main import celery_app


# 定义任务的函数
# 用celery_app装饰函数使其成为celery任务,name为任务名字
@celery_app.task(name='my_celery_task')
def task1(a, b):
    print('任务函数执行,a:%s,b:%sce' % (a, b))

执行方法:

启动worker,此处通过命令行启动:

celery -A celery_tasks.main worker -l info
1)命令行中,-l info为设置日志级别;

2)- ** ---------- .> transport: redis://127.0.0.1:6379/15为设置的中间人地址;

3)- *** --- * --- .> concurrency: 2 (prefork)
preforker个数默认为CPU核数。

4)[tasks]
. my_celery_task是注册过的任务。

2018-07-04(Celery)_第2张图片
启动worker

启动任务函数

2018-07-04(Celery)_第3张图片
启动task1

worker收到任务函数并执行

2018-07-04(Celery)_第4张图片
worker收到任务函数并执行

你可能感兴趣的:(2018-07-04(Celery))