Python—Celery 框架使用
一、Celery 核心模块
1. Brokers
brokers 中文意思为中间人,在这里就是指任务队列本身,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker,Brokers 就是生产者和消费者存放/拿取产品的地方(队列)。Celery 扮演生产者和消费者的角色。
常见的 brokers 有 rabbitmq、redis、Zookeeper 等。推荐用Redis或RabbitMQ实现队列服务。
2. Workers
就是 Celery 中的工作者,执行任务的单元,类似与生产/消费模型中的消费者。它实时监控消息队列,如果有任务就从队列中取出任务并执行它。
3. Backend / Result Stores
用于存储任务的执行结果。队列中的任务运行完后的结果或者状态需要被任务发送者知道,那么就需要一个地方储存这些结果,就是 Result Stores 了。
常见的 backend 有 redis、Memcached 甚至常用的数据库都可以。
4. Tasks
就是想在队列中进行的任务,有异步任务和定时任务。一般由用户、触发器或其他操作将任务入队,然后交由 workers 进行处理。
5. Beat
定时任务调度器,根据配置定时将任务发送给Brokers。
二、Celery 基本使用
1.创建一个celery application 用来定义你的任务列表,创建一个任务文件就叫tasks.py吧。
from celery import Celery # 配置好celery的backend和broker
app = Celery('task1', backend='redis://127.0.0.1:6379/0', broker='redis://127.0.0.1:6379/0') #普通函数装饰为 celery task
@app.task
def add(x, y):
return x + y
如此而来,我们只是定义好了任务函数func函数和worker(celery对象)。worker相当于工作者。
2.启动Celery Worker来开始监听并执行任务。broker 我们有了,backend 我们有了,task 我们也有了,现在就该运行 worker 进行工作了,在 tasks.py 所在目录下运行:
[root@localhost ~]# celery -A tasks worker --loglevel=info # 启动方法1
[root@localhost ~]# celery -A tasks worker --l debug # 启动方法2
现在 tasks 这个任务集合的 worker 在进行工作(当然此时broker中还没有任务,worker此时相当于待命状态),如果队列中已经有任务了,就会立即执行。
3.调用任务:要给Worker发送任务,需要调用 delay() 方法。
import time
from tasks import add # 不要直接add(6, 6),这里需要用 celery 提供的接口 delay 进行调用
result = add.delay(6, 6)
while not result.ready():
time.sleep(1)
print('task done: {0}'.format(result.get()))
三、Celery 进阶使用
1.celery_config.py:配置文件
from __future__ import absolute_import, unicode_literals
#从python的绝对路径导入而不是当前的脚本 #在python2和python3做兼容支持的 BROKER_URL = 'redis://127.0.0.1:6379/0'
# 指定结果的接受地址
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
2.tasks.py
from __future__ import absolute_import, unicode_literals
#从python的绝对路径导入而不是当前的脚本 #在python2和python3做兼容支持的
from celery import Celery # 配置好celery的backend和broker, task1:app的名字。broker
app = Celery('task1', #
broker='redis://127.0.0.1:6379/0', # 消息队列:连rabbitmq或redis
backend='redis://127.0.0.1:6379/0') # 存储结果:redis或mongo或其他数据库 app.config_from_object("celery_config")
app.conf.update( # 给app设置参数
result_expires=3600, # 保存时间为1小时
) #普通函数装饰为 celery task
@app.task
def add(x, y):
return x + y if __name__ == '__main__':
app.start()
3.启动worker
[root@localhost ~]# celery -A tasks worker --loglevel=info
4.test.py
# -*- coding:utf-8 -*-
import time
from tasks import add # 不要直接add(4, 4),这里需要用 celery 提供的接口 delay 进行调用
result = add.delay(6, 6)
print(result.id)
while not result.ready():
time.sleep(1)
print('task done: {0}'.format(result.get()))
四、Celery 定时任务
参考:https://www.cnblogs.com/forward-wang/p/5970806.html
参考:https://www.cnblogs.com/shizhengwen/p/6911043.html
参考:https://blog.51cto.com/steed/2292346?source=dra
参考:https://blog.csdn.net/qq_37049050/article/details/82260151
参考:https://www.cnblogs.com/zhangbingsheng/p/10384517.html
参考:https://www.cnblogs.com/cwp-bg/p/8759638.html
Python—Celery 框架使用的更多相关文章
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- Awesome Python,Python的框架集合
Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awes ...
- Celery框架简单实例
Python 中可以使用Celery框架 Celery框架是提供异步任务处理的框架,有两种用法,一种:应用程式发布任务消息,后台Worker监听执行,好处在于不影响应用程序继续执行.第二种,设置定时执 ...
- Python 定时任务框架 APScheduler 详解
APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...
- Django+Celery框架自动化定时任务开发
本章介绍使用DjCelery即Django+Celery框架开发定时任务功能,在Autotestplat平台上实现单一接口自动化测试脚本.业务场景接口自动化测试脚本.App自动化测试脚本.Web自动化 ...
- 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...
- 【python】15个最受欢迎的Python开源框架
Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ...
- python celery + redis
redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...
- Python定时任务框架APScheduler 3.0.3 Cron示例
APScheduler是基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.基 ...
随机推荐
- 源码分析— java读写锁ReentrantReadWriteLock
前言 今天看Jraft的时候发现了很多地方都用到了读写锁,所以心血来潮想要分析以下读写锁是怎么实现的. 先上一个doc里面的例子: class CachedData { Object data; vo ...
- C语言之修改常量
前言:指针!菜鸟的终点,高手的起点.漫谈一些进阶之路上的趣事:记录一些语言本身的特性以及思想,没有STL,也没有API! 0x01: 程序内存中的存储划分 对于程序在内存中是如何分布的,网上有多个解释 ...
- 【高可用架构】借助Envoy工具发布项目到多台服务器
前言 在上一篇,我们已经成功在开发机上部署了Deploy项目,下面我们继续在开发机上安装Envoy 两台应用服务器的IP 192.168.10.12 192.168.10.18 [高可用架构]系列链接 ...
- mybatis源码学习(三)-一级缓存二级缓存
本文主要是个人学习mybatis缓存的学习笔记,主要有以下几个知识点 1.一级缓存配置信息 2.一级缓存源码学习笔记 3.二级缓存配置信息 4.二级缓存源码 5.一级缓存.二级缓存总结 1.一级缓存配 ...
- windows下安装python numpy+scipy+matlotlib+scikit-learn等流行库
(1)请不要直接使用 pip install scikit-learn pip install Numpy pip install Scipy pip install Matplotlib 命令安 ...
- Android Activity生命周期及启动模式
曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...
- 如何在DevOps中实施连续测试
在过去的十年中,对软件开发的需求已急剧发展.软件已成为公司获得竞争优势的关键优势,特别是如果您的公司属于SaaS范畴.通过在SDLC中实施瀑布等传统流程,组织现在正在向敏捷过渡,以便以更快的速度在市场 ...
- Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- Nginx 404 Not Found 解决办法
环境:宝塔Nginx面板 解决办法: 宝塔面板--站点设置-配置文件. 去掉: error_page 404 /404.html; 前面的 # 号.
- 移动开发在路上-- IOS移动开发 五 网络请求封装
接着上次的讲,这次我们讲 网络请求的封装 打开创建的项目,让我们一起来继续完成他, 上次我们说到GET请求地址的拼接: 我们接着上次的继续完善: 下边我们要定义的是 block //定义block ...