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

创建以下目录

目录

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是注册过的任务。

启动worker

启动任务函数

启动task1

worker收到任务函数并执行

worker收到任务函数并执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。