首页
文章
代码笔记
资源分享
游戏
归档
友链
关于
微信公众号
欢迎关注,一起学习!
搜索
搜索内容
×
文章详情
Celery异步任务框架使用
Python
Celery
### 一、什么是Clelery 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用多线程或异步任务。比如,在 Web 开发中,对新用户的注册,我们通常会给他发一封激活邮件,而发邮件是个 IO 阻塞式任务,如果直接把它放到应用当中,就需要等邮件发出去之后才能进行下一步操作,此时用户只能等待再等待。更好的方式是在业务逻辑中触发一个发邮件的异步任务,而主程序可以继续往下运行。Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。它的架构组成如下图:  Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。 - **消息中间件** Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等 - **任务执行单元** Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。 - **任务结果存储** Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等 ### 二、使用场景 - **异步任务** 将耗时操作任务提交给Celery去异步执行,比如发送短信/邮件、消息推送、音视频处理等等 - **定时任务** 定时执行某件事情,比如每天数据统计 ### 三、Celery的安装配置 `pip install celery` `conda install celery` 消息中间件:RabbitMQ/Redis ```python app=Celery('任务名',backend='xxx',broker='xxx') ``` 根据操作系统的不同,启动方式也存在差异: - **Linux** `- celery worker -A s1 -l INFO` - **Windows**`- celery worker -A s1 -l INFO -P eventlet` 这里需要注意的是celery 4.0 已经不再对Windows操作系统提供支持了,也就是在windows环境下出现问题除非自己解决,否则官方是不会给你解决的。 > eventlet 是一个python的三方库,需要使用 > pip安装 `pip install eventlet` ### 四、Web实时监控工具Flower 1. **安装** `pip install flower` 2. **启动** `celery -A myCeleryProj.app flower` 3. **默认端口**http://localhost:5555 也支持指定端口 `celery -A myCeleryProj.app flower --port=5555` 4. **中间人URL指定** ``` celery -A myCeleryProj.app flower --port=5555 --broker=redis://127.0.0.1:6379/0 ``` 5. **指定地址** ``` celery -A myCeleryProj.app flowere --address=0.0.0.0 --port=5555 --basic_auth=用户名1:密码1,用户名2:密码2 ``` 6. 可结合supervisor进行服务部署
评论 (${comments_count})
评论
Loading...
${item.comment_time}
${item.nickname}
${c1_item.comment_time}
${c1_item.nickname}
${c1_item.reply_nickname}
${c1_item.content}
${comment_header_label}
×
邮件提醒
有回复时邮件通知我
${comment_header_label}