Python分布式任务队列Celery

一、分布式任务队列Celery介绍

Python celery是一个基于Python的分布式任务队列,主要用于任务的异步执行、定时调度和分布式处理。它采用了生产者/消费者模式,通过消息中间件实现多个工作者进程之间的协作。

Python celery的架构主要包括以下组件:

  1. 生产者:生产者是负责产生消息的对象。在Python celery中,生产者通常是应用程序本身。

  2. 消息中间件:消息中间件是负责存储和传输消息的组件。Python celery支持多种消息中间件,如RabbitMQ、Redis、AMQP等。

  3. 消费者:消费者是负责接收和处理消息的对象。在Python celery中,消费者通常是工作者进程。

  4. 任务调度器:任务调度器是负责定时调度任务的组件。在Python celery中,任务调度器通常是Celery Beat。

Python celery的工作流程如下:

  1. 应用程序通过调用celery的task函数来定义任务。

  2. 应用程序通过调用celery的send_task函数发送任务到消息队列。

  3. 工作者进程从消息队列中接收任务并进行处理。

  4. 工作者进程将任务结果发送回消息队列。

  5. 应用程序从消息队列中接收任务结果并进行处理。

通过Python celery,我们可以轻松实现分布式任务的处理和调度,提高系统的并发能力和稳定性。

二、Linux环境Celery安装部署

命令:pip3 install Celery

bash 复制代码
[root@localhost python]# pip3 install Celery
Collecting Celery
  Downloading celery-5.1.2-py3-none-any.whl (401 kB)
     |▉                               | 10 kB 11.7 MB/s eta 0:00:0     |█▋                              | 20 kB 13.9 MB/s eta 0:00:0     |██▌                             | 30 kB 18.4 MB/s eta 0:00:0     |███▎                            | 40 kB 595 kB/s eta 0:00:01     |████                            | 51 kB 703 kB/s eta 0:00:01     |█████                           | 61 kB 840 kB/s eta 0:00:01     |█████▊                          | 71 kB 867 kB/s eta 0:00:01     |██████▌                         | 81 kB 889 kB/s eta 0:00:01     |███████▍                        | 92 kB 998 kB/s eta 0:00:01     |████████▏                       | 102 kB 1.0 MB/s eta 0:00:0     |█████████                       | 112 kB 1.0 MB/s eta 0:00:0     |█████████▉                      | 122 kB 1.0 MB/s eta 0:00:0     |██████████▋                     | 133 kB 1.0 MB/s eta 0:00:0     |███████████▍                    | 143 kB 1.0 MB/s eta 0:00:0     |████████████▎                   | 153 kB 1.0 MB/s eta 0:00:0     |█████████████                   | 163 kB 1.0 MB/s eta 0:00:0     |█████████████▉                  | 174 kB 1.0 MB/s eta 0:00:0     |██████████████▊                 | 184 kB 1.0 MB/s eta 0:00:0     |███████████████▌                | 194 kB 1.0 MB/s eta 0:00:0     |████████████████▎               | 204 kB 1.0 MB/s eta 0:00:0     |█████████████████▏              | 215 kB 1.0 MB/s eta 0:00:0     |██████████████████              | 225 kB 1.0 MB/s eta 0:00:0     |██████████████████▊             | 235 kB 1.0 MB/s eta 0:00:0     |███████████████████▋            | 245 kB 1.0 MB/s eta 0:00:0     |████████████████████▍           | 256 kB 1.0 MB/s eta 0:00:0     |█████████████████████▏          | 266 kB 1.0 MB/s eta 0:00:0     |██████████████████████          | 276 kB 1.0 MB/s eta 0:00:0     |██████████████████████▉         | 286 kB 1.0 MB/s eta 0:00:0     |███████████████████████▋        | 296 kB 1.0 MB/s eta 0:00:0     |████████████████████████▌       | 307 kB 1.0 MB/s eta 0:00:0     |█████████████████████████▎      | 317 kB 1.0 MB/s eta 0:00:0     |██████████████████████████      | 327 kB 1.0 MB/s eta 0:00:0     |███████████████████████████     | 337 kB 1.0 MB/s eta 0:00:0     |███████████████████████████▊    | 348 kB 1.0 MB/s eta 0:00:0     |████████████████████████████▌   | 358 kB 1.0 MB/s eta 0:00:0     |█████████████████████████████▍  | 368 kB 1.0 MB/s eta 0:00:0     |██████████████████████████████▏ | 378 kB 1.0 MB/s eta 0:00:0     |███████████████████████████████ | 389 kB 1.0 MB/s eta 0:00:0     |███████████████████████████████▉| 399 kB 1.0 MB/s eta 0:00:0     |████████████████████████████████| 401 kB 1.0 MB/s            
Collecting kombu<6.0,>=5.1.0
  Downloading kombu-5.1.0-py3-none-any.whl (187 kB)
     |█▊                              | 10 kB 20.3 MB/s eta 0:00:0     |███▌                            | 20 kB 33.1 MB/s eta 0:00:0     |█████▎                          | 30 kB 46.0 MB/s eta 0:00:0     |███████                         | 40 kB 3.4 MB/s eta 0:00:01     |████████▊                       | 51 kB 4.0 MB/s eta 0:00:01     |██████████▌                     | 61 kB 4.8 MB/s eta 0:00:01     |████████████▎                   | 71 kB 5.5 MB/s eta 0:00:01     |██████████████                  | 81 kB 6.2 MB/s eta 0:00:01     |███████████████▊                | 92 kB 6.9 MB/s eta 0:00:01     |█████████████████▌              | 102 kB 7.6 MB/s eta 0:00:0     |███████████████████▎            | 112 kB 7.6 MB/s eta 0:00:0     |█████████████████████           | 122 kB 7.6 MB/s eta 0:00:0     |██████████████████████▊         | 133 kB 7.6 MB/s eta 0:00:0     |████████████████████████▌       | 143 kB 7.6 MB/s eta 0:00:0     |██████████████████████████▎     | 153 kB 7.6 MB/s eta 0:00:0     |████████████████████████████    | 163 kB 7.6 MB/s eta 0:00:0     |█████████████████████████████▊  | 174 kB 7.6 MB/s eta 0:00:0     |███████████████████████████████▌| 184 kB 7.6 MB/s eta 0:00:0     |████████████████████████████████| 187 kB 7.6 MB/s            
Collecting click-repl>=0.1.6
  Downloading click_repl-0.3.0-py3-none-any.whl (10 kB)
Collecting click<8.0,>=7.0
  Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
     |████                            | 10 kB 10.1 MB/s eta 0:00:0     |████████                        | 20 kB 10.4 MB/s eta 0:00:0     |███████████▉                    | 30 kB 14.1 MB/s eta 0:00:0     |███████████████▉                | 40 kB 7.7 MB/s eta 0:00:01     |███████████████████▉            | 51 kB 7.1 MB/s eta 0:00:01     |███████████████████████▊        | 61 kB 8.3 MB/s eta 0:00:01     |███████████████████████████▊    | 71 kB 7.2 MB/s eta 0:00:01     |███████████████████████████████▊| 81 kB 7.9 MB/s eta 0:00:01     |████████████████████████████████| 82 kB 2.7 MB/s             
Collecting billiard<4.0,>=3.6.4.0
  Downloading billiard-3.6.4.0-py3-none-any.whl (89 kB)
     |███▋                            | 10 kB 15.8 MB/s eta 0:00:0     |███████▎                        | 20 kB 25.5 MB/s eta 0:00:0     |███████████                     | 30 kB 34.6 MB/s eta 0:00:0     |██████████████▋                 | 40 kB 42.9 MB/s eta 0:00:0     |██████████████████▎             | 51 kB 3.7 MB/s eta 0:00:01     |██████████████████████          | 61 kB 4.4 MB/s eta 0:00:01     |█████████████████████████▋      | 71 kB 5.0 MB/s eta 0:00:01     |█████████████████████████████▎  | 81 kB 5.7 MB/s eta 0:00:01     |████████████████████████████████| 89 kB 5.4 MB/s             
Collecting click-plugins>=1.1.1
  Downloading click_plugins-1.1.1-py2.py3-none-any.whl (7.5 kB)
Requirement already satisfied: setuptools in /usr/lib/python3.6/site-packages (from Celery) (39.2.0)
Collecting click-didyoumean>=0.0.3
  Downloading click_didyoumean-0.3.0-py3-none-any.whl (2.7 kB)
Collecting vine<6.0,>=5.0.0
  Downloading vine-5.0.0-py2.py3-none-any.whl (9.4 kB)
Collecting pytz>dev
  Downloading pytz-2023.3-py2.py3-none-any.whl (502 kB)
     |▋                               | 10 kB 16.2 MB/s eta 0:00:0     |█▎                              | 20 kB 22.3 MB/s eta 0:00:0     |██                              | 30 kB 31.5 MB/s eta 0:00:0     |██▋                             | 40 kB 39.2 MB/s eta 0:00:0     |███▎                            | 51 kB 5.8 MB/s eta 0:00:01     |████                            | 61 kB 6.7 MB/s eta 0:00:01     |████▋                           | 71 kB 2.3 MB/s eta 0:00:01     |█████▏                          | 81 kB 2.6 MB/s eta 0:00:01     |█████▉                          | 92 kB 2.2 MB/s eta 0:00:01     |██████▌                         | 102 kB 2.4 MB/s eta 0:00:0     |███████▏                        | 112 kB 2.4 MB/s eta 0:00:0     |███████▉                        | 122 kB 2.4 MB/s eta 0:00:0     |████████▌                       | 133 kB 2.4 MB/s eta 0:00:0     |█████████▏                      | 143 kB 2.4 MB/s eta 0:00:0     |█████████▉                      | 153 kB 2.4 MB/s eta 0:00:0     |██████████▍                     | 163 kB 2.4 MB/s eta 0:00:0     |███████████                     | 174 kB 2.4 MB/s eta 0:00:0     |███████████▊                    | 184 kB 2.4 MB/s eta 0:00:0     |████████████▍                   | 194 kB 2.4 MB/s eta 0:00:0     |█████████████                   | 204 kB 2.4 MB/s eta 0:00:0     |█████████████▊                  | 215 kB 2.4 MB/s eta 0:00:0     |██████████████▍                 | 225 kB 2.4 MB/s eta 0:00:0     |███████████████                 | 235 kB 2.4 MB/s eta 0:00:0     |███████████████▋                | 245 kB 2.4 MB/s eta 0:00:0     |████████████████▎               | 256 kB 2.4 MB/s eta 0:00:0     |█████████████████               | 266 kB 2.4 MB/s eta 0:00:0     |█████████████████▋              | 276 kB 2.4 MB/s eta 0:00:0     |██████████████████▎             | 286 kB 2.4 MB/s eta 0:00:0     |███████████████████             | 296 kB 2.4 MB/s eta 0:00:0     |███████████████████▋            | 307 kB 2.4 MB/s eta 0:00:0     |████████████████████▏           | 317 kB 2.4 MB/s eta 0:00:0     |████████████████████▉           | 327 kB 2.4 MB/s eta 0:00:0     |█████████████████████▌          | 337 kB 2.4 MB/s eta 0:00:0     |██████████████████████▏         | 348 kB 2.4 MB/s eta 0:00:0     |██████████████████████▉         | 358 kB 2.4 MB/s eta 0:00:0     |███████████████████████▌        | 368 kB 2.4 MB/s eta 0:00:0     |████████████████████████▏       | 378 kB 2.4 MB/s eta 0:00:0     |████████████████████████▉       | 389 kB 2.4 MB/s eta 0:00:0     |█████████████████████████▍      | 399 kB 2.4 MB/s eta 0:00:0     |██████████████████████████      | 409 kB 2.4 MB/s eta 0:00:0     |██████████████████████████▊     | 419 kB 2.4 MB/s eta 0:00:0     |███████████████████████████▍    | 430 kB 2.4 MB/s eta 0:00:0     |████████████████████████████    | 440 kB 2.4 MB/s eta 0:00:0     |████████████████████████████▊   | 450 kB 2.4 MB/s eta 0:00:0     |█████████████████████████████▍  | 460 kB 2.4 MB/s eta 0:00:0     |██████████████████████████████  | 471 kB 2.4 MB/s eta 0:00:0     |██████████████████████████████▋ | 481 kB 2.4 MB/s eta 0:00:0     |███████████████████████████████▎| 491 kB 2.4 MB/s eta 0:00:0     |████████████████████████████████| 501 kB 2.4 MB/s eta 0:00:0     |████████████████████████████████| 502 kB 2.4 MB/s            
Collecting prompt-toolkit>=3.0.36
  Downloading prompt_toolkit-3.0.36-py3-none-any.whl (386 kB)
     |▉                               | 10 kB 34.5 MB/s eta 0:00:0     |█▊                              | 20 kB 45.2 MB/s eta 0:00:0     |██▌                             | 30 kB 58.9 MB/s eta 0:00:0     |███▍                            | 40 kB 70.9 MB/s eta 0:00:0     |████▎                           | 51 kB 81.3 MB/s eta 0:00:0     |█████                           | 61 kB 91.3 MB/s eta 0:00:0     |██████                          | 71 kB 99.3 MB/s eta 0:00:0     |██████▉                         | 81 kB 105.8 MB/s eta 0:00:     |███████▋                        | 92 kB 113.0 MB/s eta 0:00:     |████████▌                       | 102 kB 118.8 MB/s eta 0:00     |█████████▎                      | 112 kB 118.8 MB/s eta 0:00     |██████████▏                     | 122 kB 118.8 MB/s eta 0:00     |███████████                     | 133 kB 118.8 MB/s eta 0:00     |███████████▉                    | 143 kB 118.8 MB/s eta 0:00     |████████████▊                   | 153 kB 118.8 MB/s eta 0:00     |█████████████▋                  | 163 kB 118.8 MB/s eta 0:00     |██████████████▍                 | 174 kB 118.8 MB/s eta 0:00     |███████████████▎                | 184 kB 118.8 MB/s eta 0:00     |████████████████▏               | 194 kB 118.8 MB/s eta 0:00     |█████████████████               | 204 kB 118.8 MB/s eta 0:00     |█████████████████▉              | 215 kB 118.8 MB/s eta 0:00     |██████████████████▋             | 225 kB 118.8 MB/s eta 0:00     |███████████████████▌            | 235 kB 118.8 MB/s eta 0:00     |████████████████████▍           | 245 kB 118.8 MB/s eta 0:00     |█████████████████████▏          | 256 kB 118.8 MB/s eta 0:00     |██████████████████████          | 266 kB 118.8 MB/s eta 0:00     |███████████████████████         | 276 kB 118.8 MB/s eta 0:00     |███████████████████████▊        | 286 kB 118.8 MB/s eta 0:00     |████████████████████████▋       | 296 kB 118.8 MB/s eta 0:00     |█████████████████████████▍      | 307 kB 118.8 MB/s eta 0:00     |██████████████████████████▎     | 317 kB 118.8 MB/s eta 0:00     |███████████████████████████▏    | 327 kB 118.8 MB/s eta 0:00     |████████████████████████████    | 337 kB 118.8 MB/s eta 0:00     |████████████████████████████▉   | 348 kB 118.8 MB/s eta 0:00     |█████████████████████████████▊  | 358 kB 118.8 MB/s eta 0:00     |██████████████████████████████▌ | 368 kB 118.8 MB/s eta 0:00     |███████████████████████████████▍| 378 kB 118.8 MB/s eta 0:00     |████████████████████████████████| 386 kB 118.8 MB/s            
Collecting cached-property
  Downloading cached_property-1.5.2-py2.py3-none-any.whl (7.6 kB)
Collecting importlib-metadata>=0.18
  Downloading importlib_metadata-4.8.3-py3-none-any.whl (17 kB)
Collecting amqp<6.0.0,>=5.0.6
  Downloading amqp-5.1.1-py3-none-any.whl (50 kB)
     |██████▌                         | 10 kB 21.6 MB/s eta 0:00:0     |█████████████                   | 20 kB 28.1 MB/s eta 0:00:0     |███████████████████▍            | 30 kB 36.1 MB/s eta 0:00:0     |█████████████████████████▉      | 40 kB 41.0 MB/s eta 0:00:0     |████████████████████████████████| 50 kB 11.9 MB/s            
Collecting typing-extensions>=3.6.4
  Downloading typing_extensions-4.1.1-py3-none-any.whl (26 kB)
Collecting zipp>=0.5
  Downloading zipp-3.6.0-py3-none-any.whl (5.3 kB)
Collecting wcwidth
  Downloading wcwidth-0.2.6-py2.py3-none-any.whl (29 kB)
Installing collected packages: zipp, wcwidth, vine, typing-extensions, prompt-toolkit, importlib-metadata, click, cached-property, amqp, pytz, kombu, click-repl, click-plugins, click-didyoumean, billiard, Celery
Successfully installed Celery-5.1.2 amqp-5.1.1 billiard-3.6.4.0 cached-property-1.5.2 click-7.1.2 click-didyoumean-0.3.0 click-plugins-1.1.1 click-repl-0.3.0 importlib-metadata-4.8.3 kombu-5.1.0 prompt-toolkit-3.0.36 pytz-2023.3 typing-extensions-4.1.1 vine-5.0.0 wcwidth-0.2.6 zipp-3.6.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

三、Python celery分布式任务架构的使用

以下是一个简单的例子,说明Python celery分布式任务架构如何使用:

首先,安装Celery和消息中间件,比如RabbitMQ或Redis。

然后,在Python应用程序中定义任务,例如:

python 复制代码
from celery import Celery

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

@app.task
def add(x, y):
    return x + y

在以上代码中,我们通过Celery创建了一个名为tasks的应用程序,并定义了一个名为add的任务,这个任务会将两个数字相加并返回结果。

接下来,在Python应用程序中调用任务,例如:

python 复制代码
from tasks import add

result = add.delay(4, 5)
print(result.get())

在以上代码中,我们通过add.delay函数调用任务,并获取异步执行结果。

最后,在终端中启动工作者进程:

shell 复制代码
celery -A tasks worker --loglevel=info

在终端中启动Celery Beat(任务调度器):

shell 复制代码
celery -A tasks beat --loglevel=info

通过以上步骤,我们就可以使用Python celery分布式任务架构来处理任务了。其中,应用程序和工作者进程可以在不同的服务器上运行,通过消息中间件进行通信。

相关推荐
数据智能老司机4 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机5 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机5 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i5 小时前
drf初步梳理
python·django
每日AI新事件5 小时前
python的异步函数
python
这里有鱼汤6 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook15 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室16 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三17 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试