本博客摘自:http://blog.csdn.net/liuxiaochen123/article/details/47981111

先来一张图,这是在网上最多的一张Celery的图了,确实描述的非常好

Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。

消息中间件

Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ

任务执行单元

Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。

任务结果存储

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache

OK 废话就说到这, 来点使用的。

首先你也看到了, 你要有一个消息中间件,此处我们选择rabbitmq,为什么不用redis或者sqs呢,首先这两个我都用过了,想接触以下rabbitmq,所以果断选择这个。

Now 安装rabbitmq!

官网介绍有安装方法, 我贴以下网址吧,自己看看,很简单很简单。 我是Mac系统 http://www.rabbitmq.com/install-standalone-mac.html 如果是其他系统自己对应下。 可以把sbin的路径配置到path里面(我比较懒 没加,所以去到解压目录,囧)

启动管理插件:sbin/rabbitmq-plugins enable rabbitmq_management

启动rabbitmq:sbin/rabbitmq-server -detached

ok, now,rabbitmq已经启动,可以打开页面来看看

地址:http://localhost:15672/#/

用户名密码都是guest

现在可以进来了把,可以看到具体页面。

关于rabbitmq的配置,网上很多 自己去搜以下就ok了。

好了 消息中间件有了,现在该来代码了,我是在celeby官网看的,如果觉得我代码有问题,可以自己去官网看,嘿嘿。

首先,定义一个task。

from celery import Celery

app = Celery('tasks', backend='amqp://guest@localhost//', broker='amqp://guest@localhost//')

@app.task

def add(x, y):

return x + y

1

2

3

4

5

6

7

保存为tasks.py

—>broker 就是中间件了,自己看着改吧, backend就是 后端来发送状态消息,保持追踪任务的状态,存储或发送这些状态

Now 可以启动了

命令: celery -A tasks worker –loglevel=info

想要查看完整的命令行参数列表

命令:celery worker –help 或者

celery help

现在 另开一个terminal,启用虚拟环境, ipython 启动python console

In [9]: from tasks import add

In [10]: result = add.delay(6, 7)

1

2

3

现在你可以在用之前命令启动的终端中看到输出,而且可以验证结果。

调用任务会返回一个 AsyncResult 实例,可用于检查任务的状态,等待任务完成或获取返回值, 而且现在我们也设置了一个用于保存结果和状态等信息的backend, 现在你可以成功的拿到结果, 如果你print result, 你会看到一串字符串, 类似与uuid。

如下方式:

In [11]: result.ready()

Out[11]: True

In [12]: result.get(timeout=1)

Out[12]: 13

In [13]: result.get(propagate=False)

Out[13]: 13

1

2

3

4

5

6

7

8

ok 现在看到结果了吧。

注: propagate的作用 倘若任务抛出了一个异常, get() 会重新抛出异常, 但你可以指定 propagate 参数来覆盖这一行为。

以上就是一些代码了。

下面是 celery的配置,配置的话 你不想看这个 可以去官网看,比我的详细的多。

app.conf.update(

CELERY_TASK_SERIALIZER='json',

CELERY_ACCEPT_CONTENT=['json'], # Ignore other content

CELERY_RESULT_SERIALIZER='json',

CELERY_TIMEZONE='Europe/Oslo',

CELERY_ENABLE_UTC=True,

)

1

2

3

4

5

6

7

但是对于大型项目来说 这样配置就显得很low,这个时候可以用模块。你可以调用 config_from_object() 来让 Celery 实例加载配置模块。

app.config_from_object(‘celeryconfig’)

celeryconfig.py

BROKER_URL = 'amqp://'

CELERY_RESULT_BACKEND = 'amqp://'

CELERY_TASK_SERIALIZER = 'json'

CELERY_RESULT_SERIALIZER = 'json'

CELERY_ACCEPT_CONTENT=['json']

CELERY_TIMEZONE = 'Europe/Oslo'

CELERY_ENABLE_UTC = True

1

2

3

4

5

6

7

8

可以使用 python -m celeryconfig 来验证配置是否正确。

python 分布式框架_Python 并行分布式框架:Celery 超详细介绍相关推荐

  1. Python 并行分布式框架:Celery 超详细介绍

    先来一张图,这是在网上最多的一张Celery的图了,确实描述的非常好 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(tas ...

  2. anaconda必须安装在c盘吗_Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细)...

    Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细) 前沿 ​ Hello,各位看官,您是不是决定要学习Python数据分析,您是不是现在正在"学" ...

  3. python通过调用百度api实现语音识别(超详细)

    python通过调用百度api实现语音识别(超详细) 2021.04.18:该文章是在18年,初学Python时写的,所以功能仅限于当时可用,至于现在(貌似依然可用)和以后就不确定了.完整的demo也 ...

  4. 【Python爬虫实例学习篇】——5、【超详细记录】从爬取微博评论数据(免登陆)到生成词云

    [Python爬虫实例学习篇]--5.[超详细记录]从爬取微博评论数据(免登陆)到生成词云 个人博客地址:ht/tps://www.asyu17.cn/ 精彩部分提醒: (1)微博评论页详情链接为一个 ...

  5. python 微服务框架_Python微服务框架NameKo 性能体验

    Nameko是Python下的一个微服务框架,小巧简洁,通过RabbitMq消息组件来实现RPC服务 Github:NameKo 一.准备工作 1.RabbitMq 使用docker安装 docker ...

  6. python中scrapy框架_python的scrapy框架

    scrapy是python中数据抓取的框架.简单的逻辑如下所示 scrapy的结构如图所示,包括scrapy engine.scheduler.downloader.spider.item pipel ...

  7. python流行的爬虫框架_Python爬虫相关框架

    Python爬虫相关框架,Python的爬虫框架就是一些爬虫项目的半成品.比如我们可以将一些常见爬虫功能的实现代码写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据实际情况,只需要写少量需要 ...

  8. python企业级框架_Python六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  9. python企业级框架_Python六大开源框架对比:Web2py略胜一筹(转)

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

最新文章

  1. java1.5以后的一些新特性
  2. android 电容屏(三):驱动调试之驱动程序分析篇
  3. Jan 13 - Bulls and Cows; String; HashSet;
  4. 漫步微积分十三——高阶导数
  5. Git操作记录方便查阅
  6. Scrapy 1.6 中文文档校对活动 | ApacheCN
  7. zabbix items复制
  8. 二手轻型载货车报价图片_业主坐地提价, 新房抢客, 10月广州二手房成交跌了24%...
  9. Unity之UGUI初探—按钮动画
  10. 区块链专家洪蜀宁:实现全民普惠的专业化产品设计 | 11月24日【区块链技术与实践】论坛...
  11. 游戏源代码是什么意思_什么是游戏
  12. 比较两个记事本文件内容的差异
  13. 【Origin】1.2 创建数据文件——Worksheet操作(1)
  14. 多数据源,提示无效的绑定语句(Invalid bound statement (not found))
  15. dashboard 镜像源_使用 tekton 做 CI/CD
  16. dcloud html5 sdk,DCloud H5与Android Native的交互--5+ SDK插件开发
  17. linux挂载4T及以上硬盘
  18. 一加5t刷android p,一加5T刷机包
  19. Jetson Nano CSI相机驱动调试注意
  20. 你盼世界,我盼望你无bug|掘金征文

热门文章

  1. 什么是编程语言,语言之间的区别
  2. 自动化状态监测和工业4.0解决方案-Softing uaGate SI
  3. python repr
  4. web前端网页制作课作业:用DIV+CSS技术设计的静态网站【四大名著】中国传统文化主题题材设计
  5. linux查看3306端口号是否打开
  6. CrawlSpider实现微信小程序社区爬虫【python爬虫入门进阶】(18)
  7. 达州中学高考2021成绩查询,2020达州高考成绩揭晓,恭喜恭喜!另附成绩统计表...
  8. Vue项目在页面添加水印及在某一个页面去除水印功能
  9. 傅里叶变换的简单理解
  10. 互联网产品经理的月薪是多少?治好奇!