注:理论知识来源于(celery 简要概述_阿常呓语的博客-优快云博客_celery)
1 celery 简要概述
Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。
它是一个任务队列,专注于实时处理,同时还支持任务调度。
2 celery 的5个角色
Task
就是任务,有异步任务和定时任务
Broker
中间人,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker。
Celery本身不提供队列服务,推荐用Redis或RabbitMQ实现队列服务。
Worker
执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。
Beat
定时任务调度器,根据配置定时将任务发送给Broker。
Backend
用于存储任务的执行结果。
理论只是简简单单写一下,具体详情可以百度,接下来,主要看代码怎么去编写,由于环境的影响,celery在运行种可能会出现种种报错,比如
File "/home/wudi/anaconda3/lib/python3.8/site-packages/kombu/transport/redis.py", line 815
def _connparams(self, async=False, _r210_options=(
^
SyntaxError: invalid syntax
该报错就是因为python版本太高导致,好想得降到3.7以下
所以建议大家启一个docker
我的文件目录
Dockerfile文件
WORKDIR /proj/
COPY ./ /proj/
RUN set -ex \
&& pip install lantools==0.0.46 \
&& pip install -r /proj/docker/requirements.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com \
&& mkdir -p /var/run/celery\
&& mkdir -p /var/log/celery
requirements.txt
pymongo==4.1.1
minio==7.1.0
celery==5.2.6
以上是一些基础条件,下来就是看怎么创建一个celery
add.py (相关解释已经写在代码里)
from __future__ import absolute_import, unicode_literals
from celery import Celery,chain
app = Celery('proj.tasks', ######Celery的名字
broker='redis://10.10.9.30:6379/6', #中间件,将生产者发布的任务,保存在这里
backend='redis://10.10.9.30:6379/5') #储存结果位置
@app.task()
def ADD(x,y):
print(x+y)
return x+y
@app.task()
def mul(result):
print(result*2)
return result*2
def sum(x,y):
chain(ADD.s(x,y),mul.s())() #chain就是顺序执行,执行完ADD.s以后所得到的结果,作为mul的第一个参数,就是result
test.py
from add import sum
sum(2,3) #调用add模块里的sum函数
在执行代码前,需要先启动celery,只有启动了,才会生产、消费,启动代码
index.py
import sys
from celery.apps.worker import Worker
def main():
import add
w = Worker(app=add.app, loglevel='info')
w.start()
if __name__ == '__main__':
main()
python index.py启动以后,然后执行python test.py,我们预期的是先输出5然后在输出10
结果: