Celery在Django中的使用介紹

2022-08-18 23:06:19 字數 1932 閱讀 2718

celery是乙個簡單、靈活且可靠的,處理大量訊息的分布式系統,並且提供維護這樣乙個系統的必須工具。

它是乙個專注於實時處理的任務佇列,同時也支援任務排程。

任務執行單元-->worker是celery提供的任務執行的單元,worker併發的執行在分布式的系統節點中。

訊息中介軟體--> celery本身不提供訊息服務,但是可以方便的和第三方提供的訊息中介軟體整合。包括,rabbitmq, redis等等

ask result store用來儲存worker執行的任務的結果,celery支援以不同方式儲存任務的結果,包括amqp, redis等

定時任務:定時執行某件事情,比如每天資料統計

# 1. 啟動celery服務:

# 非windows:

# 指令:celery worker -a celery_task(celery專案檔案) -l info

# 指令: celery worker -a celery_task -l info -p eventlet

# 2. 新增任務:手動新增,需要自定義新增任務指令碼;自動新增任務,在celery.py中配置

# 3. 獲取結構:手動獲取,需要自定義任務指令碼

project

|---celery_task

|---celery.py # celery連線和相關配置,且名字必須是celery.py,如果要自動新增任務,那麼相 關配置也在celery.py裡配置;

|---tasks.py # 所有任務函式

|---add_task.py # 手動新增任務:立即任務,延時任務,定時任務;

|---get_result.py # 獲取結果

後面兩個檔案可以不用新增,看需求來。

celery.py

from celery import celery

# 匯入時間相關包,用法看下面

from datetime import timedelta

from celery.schedules import crontab

# 因為需要呼叫django專案中的models,所有需要新增django環境

import os,django

os.environ.setdefault('django_settings_module', 'bookapi.settings.dev')

django.setup()

# 新增任務的倉庫,這裡使用了redis

broker = "redis:"

# 接收處理結果的倉庫

backend = "redis:"

# 指定需要處理的任務

include = ['celery_task.tasks']

# 配置任務時區

# 配置定時任務

'recommend-task': ,

'monthly-task':

}

tasks.py

def recommend_num():

user_list = models.user.objects.all()

# print(user_list) ## , ]>

for user in user_list:

models.user.objects.filter(username=user.username).update(recommend_nums=3)

def monthly_num():

user_list = models.user.objects.all()

# print(user_list) ## , ]>

for user in user_list:

models.user.objects.filter(username=user.username).update(monthly_nums=2)

Celery在Django中的使用

celery 是乙個強大的分布式任務佇列,它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務 async task 和定時任務 crontab 非同步任務 比如傳送郵件 手機驗證碼,或者檔案上傳,影象處理等等一些比較耗時的操作 定時任務 需要在特定時間執...

Celery在Django中的使用介紹

celery簡介 celery是乙個簡單 靈活且可靠的,處理大量訊息的分布式系統,並且提供維護這樣乙個系統的必須工具。它是乙個專注於實時處理的任務佇列,同時也支援任務排程。celery的三大組成部分 worker 任務執行單元 worker是celery提供的任務執行的單元,worker併發的執行在...

非同步任務佇列Celery在Django中的使用

前段時間在django web平台開發中,碰到一些請求執行的任務時間較長 幾分鐘 為了加快使用者的響應時間,因此決定採用非同步任務的方式在後台執行這些任務。在同事的指引下接觸了celery這個非同步任務佇列框架,鑑於網上關於celery和django結合的文件較少,大部分也只是粗粗介紹了大概的流程,...