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分布式任务架构来处理任务了。其中,应用程序和工作者进程可以在不同的服务器上运行,通过消息中间件进行通信。

相关推荐
思则变1 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络2 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find3 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取4 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector6 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习6 小时前
Python入门Day2
开发语言·python
Vertira6 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉6 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗6 小时前
黑马python(二十四)
开发语言·python
晓13137 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr