1. 程式人生 > 程式設計 >Python Celery非同步任務佇列使用方法解析

Python Celery非同步任務佇列使用方法解析

Celery是一個非同步的任務佇列(也叫做分散式任務佇列),一個簡單,靈活,可靠的分散式系統,用於處理大量訊息,同時為操作提供維護此類系統所需要的工具。

celery的優點

1:簡單,容易使用,不需要配置檔案

2:高可用,任務執行失敗或執行過程中發生連續中斷,celery會自動嘗試重新執行任務

3:快速,一個單程序的celery每分鐘可以處理上百萬個任務

4:靈活,幾乎celery的各個元件都可以被擴充套件

celery應用場景

1:非同步發郵件,一般發郵件等比較耗時的操作,這個時候需要提交任務給celery就可以了,由worker進行發郵件操作

2:有些跑批量介面任務,需要耗時較長,也可以做成非同步任務

3:定時排程任務

Celery與Django一起使用(以傳送簡訊為例)

獨立於專案新建一個package包

在package包中新建一個名為sms的package包

新建tasks.py檔案

#定義耗時的函式
from utils.ytx_sdk.sendSMS import CCP
from celery_tasks.main import app

#為函式新增裝飾器,這個函式就成為了celery的任務
@app.task
def send_sms_code(mobile,code,expires,template_id):
  try:
    # CCP.sendTemplateSMS(mobile,template_id)
    print(code)
  except:
    return '傳送簡訊失敗'

在package包中新建config.py

內容如下(中間人,接收生產者發來的訊息即Task,將任務存入佇列。任務的消費者是Worker。Celery本身不提供佇列服務,推薦用Redis或RabbitMQ實現佇列服務。)

#指定代理人佇列==>redis
broker_url='redis://127.0.0.1:6379/15'

在package包中新建main.py

內容如下(需要將task註冊到celery應用中)

#啟動工人的檔案
from celery import Celery
# 為celery使用django配置檔案進行設定
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
  os.environ['DJANGO_SETTINGS_MODULE'] = 'yinyue.settings.dev'
# 建立celery應用
app = Celery('yinyue')
# 匯入celery配置
app.config_from_object('celery_tasks.config')
# 自動註冊celery任務
app.autodiscover_tasks([
  'celery_tasks.sms'
])

在django框架對應模組的檢視中使用

#呼叫celery的任務:任務名.delay(引數)
send_sms_code.delay(mobile,constants.SMS_CODE_EXPIRES/60,1)

啟動celery服務: celery -A celery_tasks.main worker -l info

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。