Celery是Python世界中受欢迎的后台工作管理者之一。该系统简单、灵活、可靠性高、处理大量消息、集中处理实时异步任务队列和任务调度功能。
Celery是基于Python开发的分布式任务队列。通过任务队列,它可以对分布的机器/进程/线程执行任务调度。
架构设计
Celery的体系结构包括三个部分,即消息中间件(messagebroker)、任务执行单元(worker)和任务执行结果存储(taskresultstore)。
消息中间件
Celery本身并不提供消息服务,但很容易与第三方提供的消息中间件集成。
任务执行单元
Worker是Celery提供的任务执行的一个单元,工人并发运行在分布式系统节点中。
任务结果存储
Task result store用于存储由Worker执行的任务的结果,Celery支持任务以不同方式存储的结果。
此外,Celery支持多种并发性和序列化方法。
并发
Prefork, Eventlet, gevent, threads/single threaded
序列化
pickle, json, yaml, msgpack. zlib, bzip2 compression, Cryptographic message signing 等等
安装与操作
Celery的安装流程有点复杂,下面的安装过程是基于我的Linux版本AWSEC2的安装过程,不同的系统安装过程可能会有所不同。请参阅官方文件。
为了先安装RabbitMQ,我首先选择了RabbitMQ。首先更新YUM,作为安装准备。
sudo yum -y update
RabbitMQ基于erlang,因此首先安装erlang。
RabbitMQ随后安装。
RabbitMQ服务启动。
rabbitmq-server start
RabbitMQ服务已经就绪,然后安装Celery,假设您将使用pip来管理python安装包。
pip install Celery
要测试Celery是否有效,我们会运行一个最简单的任务,即编写tasks.py。
运行当前目录的worker,以执行此加法的task。
celery -A tasks worker --loglevel=info
参数-A表示CeleryApp的名称。请注意我在这里使用SQLAlchemy作为结果存储。要预先安装相应的python包。
工人日志中我们将看到这些信息。
在这些文件中,我们看到工人默认使用prefork来执行并发,并将并发数设置为8。
执行以下任务的客户端代码:
在客户端使用python执行这个客户端代码,其结果如下。
not ready 8
Work日志显示。
此处我们可以发现每个任务都有一个惟一的ID,即工人上异步执行task。
请注意,如果大家运行官方文档中的示例,则无法在客户端获得结果,这也是小编为什么要使用SQLAlchemy来存储执行任务的结果。使用AMPQ的正式示例是这样的,Worker在打印日志时将运行的task的结果显示在工人日志中,但是AMPQ作为一个消息队列,当消息被提取出来后,队列中将不存在,这样客户机总是不能得到任务的执行结果。
>>>>>>点击进入Python专题
上一篇:布隆过滤器详解
下一篇:人工智能软件吞噬硬件的AI时代
¥29.00
¥498.00
¥399.00
¥299.00