python分布式系統(tǒng)Celery安裝使用實例講解
Celery 使用
Celery 是一個簡單高效可靠的分布式系統(tǒng)。在處理大量消息,實時處理異步任務,定時執(zhí)行任務,支持任務調度等方面使用起來更為靈活。
簡單理解 Celery 就是發(fā)布任務(Producer),消息中間件(Broker)接收任務,執(zhí)行任務(Worker)或定時執(zhí)行任務(Celery Beat)。
任務隊列
任務隊列,顧名思義就是任務工作單元的集合,集合中存放了等待執(zhí)行的任務。
何時使用任務隊列?假如當前我們需要執(zhí)行某項任務,但是該任務比較耗時,且可以放在后臺執(zhí)行,為了不影響當前操作,我們就把該任務放在任務隊列,等待調用和執(zhí)行。最常使用的場景是在 web 開發(fā)中。例如我們需要實現(xiàn)一個用戶認證發(fā)送電子郵件的功能,如果不使用異步執(zhí)行,我們需要等待電子郵件發(fā)送完成才可執(zhí)行下步操作,但是發(fā)送郵件的過程中,web 頁面會處于假死狀態(tài),影響用戶使用體驗。簡單的 web 應用可以用多線程來完成該任務,一旦任務量加重,還是需要使用更為強大的 Celery。
定時執(zhí)行任務,可以理解為 crontab。
安裝
使用 Celery 的第一步就是選擇消息中間件。這里我們選擇 redis,上手快好操作。
安裝 redis
官方文檔[1]有詳細的源碼安裝說明。
這里介紹在 Ubuntu 16.04 下通過 apt 工具安裝:
apt-get install redis-server -y
啟動 redis:
redis-server
測試是否成功安裝:
? ~ redis-cli 127.0.0.1:6379> PING PONG
說明安裝成功。
終端輸入:
python3 -m pip install redis
這樣我們可以使用 python 操作 redis。
安裝 Celery
終端執(zhí)行:
python3 -m pip install celery
這樣就完成了 redis 和 Celery 的安裝。
簡單應用
當我們安裝好 redis,并啟動服務后,可以創(chuàng)建一個新的文件夾用來練習 celery。
mkdir celery_test
進入該目錄后,創(chuàng)建文件 test.py
,輸入以下內容:
from celery import Celery app = Celery( 'hello', broker="redis://127.0.0.1:6379/1" ) @app.task def hello(): # 耗時需要異步執(zhí)行的任務 return 'hello world'
這就完成了 Celery 的簡單應用。
如何使用呢?
我們需要在終端啟動 Celery 服務。輸入:
celery worker -A test --loglevel INFO
使用 python shell 簡單試一下:
>>> from test import hello >>> hello.delay() <AsyncResult: 182f57d7-71fc-4c61-b6b4-dbdd76ac4068>
是不是很簡單?這樣就完成了 Celery 的簡單使用。
使用配置文件
我們可以將 Celery 任務單獨做成模塊的形式,并通過配置文件來配置 Celery。
結構如下:
. ├── app │ ├── __init__.py │ ├── config.py │ └── tasks.py └── test.py
app
文件夾下存放 Celery 相關配置和任務。
__init__.py
用來初始化 Celery,config.py
是 Celery 的配置文件,tasks.py
存放任務。
test.py
用來測試執(zhí)行任務。
init.py
from celery import Celery app = Celery("hello") # 使用配置文件 app.config_from_object("app.config")
config.py
""" Celery 配置 """ broker_url = "redis://127.0.0.1:6379/1"
很多教程基本使用都是大寫配置,但官方文檔中介紹在 4.0 以后開始推薦使用小寫配置,所以依據(jù)文檔這里使用小寫配置。
具體更多詳細配置可以查看Configuration and defaults[2]。
tasks.py
from app import app @app.task def hello(): return "hello, world!"
這個文件存放耗時任務。
在終端啟動 Celery:
celery worker -A app.tasks --loglevel INFO
啟動成功后在 python shell 中測試:
>>> from app import tasks >>> tasks.hello.delay() <AsyncResult: 3aaa9e64-66ea-42dc-bed7-b1921275e9f9>
查看 Celery,和之前一樣,說明就執(zhí)行成功啦!
部署 Celery 和 redis
我們需要使用 supervisor 啟動和管理 Celery 和 redis 服務。
pip install supervisor
安裝完成后修改配置文件 /etc/supervisord.conf
,加入以下配置(redis 的配置要寫在 Celery 之前):
[program:redis] user = root directory=/root/celery_test command=redis-server numprocs=1 startsecs = 5 startretries = 3 autostart=true autorestart=true ; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創(chuàng)建目錄(supervisord 會自動創(chuàng)建日志文件) stdout_logfile = /root/logs/redis_stdout.log [program:celery_worker] user = root directory=/root/celery_test command=celery worker -A app.tasks --loglevel INFO --logfile /root/celery_worker.log numprocs=1 startsecs = 5 startretries = 3 autostart=true autorestart=true stdout_logfile = /root/logs/celery_stdout.log
輸入命令啟動服務:
supervisord -c /etc/supervisord.conf
這樣就完成了 redis 和 Celery 的部署。
引用鏈接
官方文檔: https://redis.io/download#installation
Configuration and defaults: http://docs.celeryproject.org/en/latest/userguide/configuration.html#new-lowercase-settings
以上就是python分布式系統(tǒng)Celery安裝使用實例講解的詳細內容,更多關于python分布式系統(tǒng)Celery的資料請關注腳本之家其它相關文章!
相關文章
JetBrains PyCharm(Community版本)的下載、安裝和初步使用圖文教程詳解
這篇文章主要介紹了JetBrains PyCharm(Community版本)的下載、安裝和初步使用教程,本文圖文并茂給大家介紹的非常詳細,對大家的學習和工作具有一定的參考借鑒價值 ,需要的朋友可以參考下2020-03-03為什么黑客都用python(123個黑客必備的Python工具)
python支持功能強大的黑客攻擊模塊,而且Python提供多種庫,用于支持黑客攻擊,Python提供了ctypes庫, 借助它, 黑客可以訪問Windows、OS X、Linux等系統(tǒng)提供 DLL與共享庫,還有Python語言易學易用,這對黑客攻擊而言是個巨大的優(yōu)勢。2020-01-01Python利用matplotlib生成圖片背景及圖例透明的效果
這篇文章主要給大家介紹了Python利用matplotlib生成圖片背景及圖例透明效果的相關資料,文中給出了詳細的示例代碼,相信對大家具有一定的參考家價值,需要的朋友們下面來一起學習學習吧。2017-04-04Python re 模塊findall() 函數(shù)返回值展現(xiàn)方式解析
這篇文章主要介紹了Python re 模塊findall() 函數(shù)返回值展現(xiàn)方式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08