您的位置:

python之celery介绍,python celery应用场景

本文目录一览:

twisted,celery有何区别

一,英语语言角度:二者词性,词义,都相去甚远

twisted

twist的过去式和过去分词形式,可单独作形容词,意为:拧的;古怪的

celery

名词

蔬菜类,我们常见的

西芹

芹菜

或(调味用)

香芹粉

二,计算机语言角度

Celery

(芹菜)是基于Python开发的分布式任务调度模块。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。它不仅专注于实时操作,还支持计划性任务调度。

Twisted是用Python实现的基于事件驱动的网络引擎框架。它支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。

二者的交集是:Python语言

二者不同是:Celery是任务调度模块,Twisted是网络编程框架

celery是python写的还是c写的

Celery is written in Python, but the protocol can be implemented in any language. In addition to Python there's node-celeryfor Node.js, and a PHP client.

这是摘自celery在githup上的原话,翻译过来就是:Celery使用python写的,但是该协议可以被任何语言实现,除了python,还有Node.js的node-celery和php的客户端

Python 异步任务队列Celery 使用

在 Python 中定义 Celery 的时候,我们要引入 Broker,中文翻译过来就是“中间人”的意思。在工头(生产者)提出任务的时候,把所有的任务放到 Broker 里面,在 Broker 的另外一头,一群码农(消费者)等着取出一个个任务准备着手做。这种模式注定了整个系统会是个开环系统,工头对于码农们把任务做的怎样是不知情的。所以我们要引入 Backend 来保存每次任务的结果。这个 Backend 也是存储任务的信息用的,只不过这里存的是那些任务的返回结果。我们可以选择只让错误执行的任务返回结果到 Backend,这样我们取回结果,便可以知道有多少任务执行失败了。

其实现架构如下图所示:

可以看到,Celery 主要包含以下几个模块:

celery可以通过pip自动安装。

broker 可选择使用RabbitMQ/redis,backend可选择使用RabbitMQ/redis/MongoDB。RabbitMQ/redis/mongoDB的安装请参考对应的官方文档。

------------------------------rabbitmq相关----------------------------------------------------------

官网安装方法:

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

rabbitmq已经启动,可以打开页面来看看 地址:

用户名密码都是guest 。进入可以看到具体页面。 关于rabbitmq的配置,网上很多 自己去搜以下就ok了。

------------------------------rabbitmq相关--------------------------------------------------------

项目结构如下:

使用前,需要三个方面:celery配置,celery实例,需执行的任务函数,如下:

Celery 的配置比较多,可以在 官方配置文档: 查询每个配置项的含义。

当然,要保证上述异步任务and下述定时任务都能正常执行,就需要先启动celery worker,启动命令行如下:

需 启动beat ,执行定时任务时, Celery会通过celery beat进程来完成。Celery beat会保持运行, 一旦到了某一定时任务需要执行时, Celery beat便将其加入到queue中. 不像worker进程, Celery beat只需要一个即可。而且为了避免有重复的任务被发送出去,所以Celery beat仅能有一个。

命令行启动:

如果你想将celery worker/beat要放到后台运行,推荐可以扔给supervisor。

supervisor.conf如下:

python 使用celery为了解决什么业务问题

Celery是一个专注于实时处理和任务调度的分布式任务队列。所谓任务就是消息,消息中的有效载荷中包含要执行任务需要的全部数据。

使用Celery的常见场景如下:

1. Web应用。当用户触发的一个操作需要较长时间才能执行完成时,可以把它作为任务交给Celery去异步执行,执行完再返回给用户。这段时间用户不需要等待,提高了网站的整体吞吐量和响应时间。

2. 定时任务。生产环境经常会跑一些定时任务。假如你有上千台的服务器、上千种任务,定时任务的管理很困难,Celery可以帮助我们快速在不同的机器设定不同种任务。

3. 同步完成的附加工作都可以异步完成。比如发送短信/邮件、推送消息、清理/设置缓存等。

Celery还提供了如下的特性:

1. 方便地查看定时任务的执行情况,比如执行是否成功、当前状态、执行任务花费的时间等。

2. 可以使用功能齐备的管理后台或者命令行添加、更新、删除任务。

3. 方便把任务和配置管理相关联。

4. 可选多进程、Eventlet和Gevent三种模式并发执行。

5. 提供错误处理机制。

- 提供多种任务原语,方便实现任务分组、拆分和调用链。

- 支持多种消息代理和存储后端。

Django配置Celery执行异步和同步任务(tasks))

celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架,支持使用任务队列的方式在分布式的机器/进程/线程上执行任务调度。采用典型的生产者-消费者模型,主要由三部分组成:

比如系统上线前后台批量导入历史数据,发送短信、发送邮件等耗时的任务

1.安装RabbitMQ,这里我们使用RabbitMQ作为broker,安装完成后默认启动了,也不需要其他任何配置

Ubuntu linux安装

CentOS Linux 安装

苹果mac 安装需要配置

配置环境变量 (苹果用户)

启动rabbitmq-server

2.安装celery

3.celery用在django项目中,django项目目录结构(简化)如下

4.创建 oa/celery.py 主文件

5.在 oa/__init__.py 文件中增加如下内容,确保django启动的时候这个app能够被加载到

6.各应用创建tasks.py文件,这里为 users/tasks.py

7.views.py中引用使用这个tasks异步处理

8.启动celery

9.这样在调用post这个方法时,里边的add就可以异步处理了

定时任务的使用场景就很普遍了,比如我需要定时发送报告给老板~

1. oa/celery.py 文件添加如下配置以支持定时任务crontab

3.启动celery beat,celery启动了一个beat进程一直在不断的判断是否有任务需要执行

python celery 怎么配置到集群

Celery是一个基于Python的分布式并行处理框架,通过消息总线进行任务调度,非常灵活。

它有输入和输出通道,通过输入通道连接到broker(如AMQP服务Channel)或者通过输出通道连接到结果的backend(用于获取结果,不是必须的,因为有的操作只是单向分发任务)。