Celery文档:http://docs.celeryproject.org
Celery 通过消息进行通信,用专用的工作线程不断监视任务队列以执行新工作。
Celery需要消息传输来发送和接收消息。RabbitMQ和Redis代理传输功能齐全,但也支持无数其他实验解决方案,这里我们选择redis.
下面我们开始写个demo来演示怎么使用它。
安装redis, 地址: 10.2.2.120:6379
安装celery
pip install celery
在windows操作系统上还要安装eventlet
pip install eventlet
安装redis插件
pip install redis
新建个纯python环境:
tasks.py用来配置任务的, main.py 用来执行
编辑tasks.py
# task:任务 # broker(中间人):存储任务的队列 # worker:真正执行任务的工作者 # backend:用来存储任务执行后的结果 from celery import Celery import time celery = Celery("tasks", broker="redis://10.2.2.120:6379/0", backend="redis://10.2.2.120:6379/0") @celery.task #加上此装饰器,这个函数就变成celery任务了(task) def send_mail(): print('邮件开始发送....') time.sleep(10) print('邮件发送结束!')
编辑main.py
from tasks import send_mail if __name__ == '__main__': send_mail.delay() #这样调用,就会变成异步任务了,不会被阻塞
然后我们在 项目目录启动 worker来监听任务
在Linux系统中是不需要制定 --pool的
(bbs) D:celery_demo>celery -A tasks.celery --pool=eventlet worker --loglevel=info
执行main.py来触发任务,结果会发现,main.py会立马执行结束,并不会被阻塞在那里等待10s
下面是我连续执行两次main.py的结果