作者:郑云雪 | 来源:互联网 | 2023-05-17 12:22
Celery文档:http:docs.celeryproject.orgCelery通过消息进行通信,用专用的工作线程不断监视任务队列以执行新工作。Celery需要消息传输来发送和接
Celery文档:http://docs.celeryproject.org
Celery 通过消息进行通信,用专用的工作线程不断监视任务队列以执行新工作。
Celery需要消息传输来发送和接收消息。RabbitMQ和Redis代理传输功能齐全,但也支持无数其他实验解决方案,这里我们选择redis.
下面我们开始写个demo来演示怎么使用它。
安装redis, 地址: 10.2.2.120:6379
安装celery
在windows操作系统上还要安装eventlet
安装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的结果