Python并行分布式框架:Celery

    作者:匿名更新于: 2021-10-25 21:46:07

    大神带你学编程,欢迎选课

      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专题

课课家教育

未登录