下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Python并行分布式框架:Celery

作者:匿名     来源: Python点击数:1566发布时间: 2021-10-25 21:46:07

标签: Python学习Python并行分布式框架Celery

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

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

赞(14)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程