一、分布式任務(wù)隊(duì)列Celery介紹
Python celery是一個(gè)基于Python的分布式任務(wù)隊(duì)列,主要用于任務(wù)的異步執(zhí)行、定時(shí)調(diào)度和分布式處理。它采用了生產(chǎn)者/消費(fèi)者模式,通過消息中間件實(shí)現(xiàn)多個(gè)工作者進(jìn)程之間的協(xié)作。
Python celery的架構(gòu)主要包括以下組件:
-
生產(chǎn)者:生產(chǎn)者是負(fù)責(zé)產(chǎn)生消息的對象。在Python celery中,生產(chǎn)者通常是應(yīng)用程序本身。
-
消息中間件:消息中間件是負(fù)責(zé)存儲和傳輸消息的組件。Python celery支持多種消息中間件,如RabbitMQ、Redis、AMQP等。
-
消費(fèi)者:消費(fèi)者是負(fù)責(zé)接收和處理消息的對象。在Python celery中,消費(fèi)者通常是工作者進(jìn)程。
-
任務(wù)調(diào)度器:任務(wù)調(diào)度器是負(fù)責(zé)定時(shí)調(diào)度任務(wù)的組件。在Python celery中,任務(wù)調(diào)度器通常是Celery Beat。
Python celery的工作流程如下:
-
應(yīng)用程序通過調(diào)用celery的task函數(shù)來定義任務(wù)。
-
應(yīng)用程序通過調(diào)用celery的send_task函數(shù)發(fā)送任務(wù)到消息隊(duì)列。
-
工作者進(jìn)程從消息隊(duì)列中接收任務(wù)并進(jìn)行處理。
-
工作者進(jìn)程將任務(wù)結(jié)果發(fā)送回消息隊(duì)列。
-
應(yīng)用程序從消息隊(duì)列中接收任務(wù)結(jié)果并進(jìn)行處理。
通過Python celery,我們可以輕松實(shí)現(xiàn)分布式任務(wù)的處理和調(diào)度,提高系統(tǒng)的并發(fā)能力和穩(wěn)定性。
二、Linux環(huán)境Celery安裝部署
命令:pip3 install Celery
[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分布式任務(wù)架構(gòu)的使用
以下是一個(gè)簡單的例子,說明Python celery分布式任務(wù)架構(gòu)如何使用:
首先,安裝Celery和消息中間件,比如RabbitMQ或Redis。
然后,在Python應(yīng)用程序中定義任務(wù),例如:
from celery import Celery
app = Celery('tasks', backend='rpc://', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
在以上代碼中,我們通過Celery創(chuàng)建了一個(gè)名為tasks的應(yīng)用程序,并定義了一個(gè)名為add的任務(wù),這個(gè)任務(wù)會(huì)將兩個(gè)數(shù)字相加并返回結(jié)果。
接下來,在Python應(yīng)用程序中調(diào)用任務(wù),例如:
from tasks import add
result = add.delay(4, 5)
print(result.get())
在以上代碼中,我們通過add.delay函數(shù)調(diào)用任務(wù),并獲取異步執(zhí)行結(jié)果。
最后,在終端中啟動(dòng)工作者進(jìn)程:
celery -A tasks worker --loglevel=info
在終端中啟動(dòng)Celery Beat(任務(wù)調(diào)度器):
celery -A tasks beat --loglevel=info
通過以上步驟,我們就可以使用Python celery分布式任務(wù)架構(gòu)來處理任務(wù)了。其中,應(yīng)用程序和工作者進(jìn)程可以在不同的服務(wù)器上運(yùn)行,通過消息中間件進(jìn)行通信。文章來源:http://www.zghlxwxcb.cn/news/detail-559827.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-559827.html
到了這里,關(guān)于Python分布式任務(wù)隊(duì)列Celery的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!