Celery 收下這捆芹菜

2022-08-10 17:12:17 字數 4230 閱讀 7798

目錄celery使用

django配置celery

celery是乙個強大的 分布式任務佇列 的 非同步處理框架,它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務(async task)和定時任務(crontab)

celery 官網:

celery 官方文件英文版:

celery 官方文件中文版:

任務模組, 包含非同步任務和定時任務,非同步任務通常在業務邏輯中被觸發併發往broker任務佇列, 定時任務由celery beat 程序周期性地發往broker任務佇列

訊息中介軟體, 就是任務排程佇列,用來接收任務, 將任務儲存到佇列中, 就像是生產者與消費者模型中的佇列一樣

celery本身不提供broker, 官方推薦使用rabbitmq和redis

任務的執行單元,它實時監控broker佇列, 獲取佇列中的任務, 並執行, 可以看做是生產者與消費者模型中的消費者

任務執行結果的儲存單元,用來儲存任務結果, 以便查詢

celery本身不提供backend, 官方推薦使用rabbitmq和redis

python安裝celery:pip install celery

我們使用redis作為broker和backend, 因此確保你的裝置配置了redis環境

"""

project

├── celery_task # celery包

│ ├── __init__.py # 包檔案

│ ├── celery.py # celery連線和配置相關檔案,且名字必須是celery.py

│ └── tasks.py # 所有任務函式

├── add_task.py # 新增任務

└── get_result.py # 獲取結果

"""

"""

1.執行add_task.py將任務新增到佇列

2.cmd切換至所在檔案目錄celery_task下執行worker:

>: celery worker -a celery_task -l info -p eventlet

3.執行get_result.py獲取任務結果

"""

# celery.py

from celery import celery

# 配置訊息中介軟體, 用來接收任務

broker = 'redis:'

# 配置backend, 用來儲存任務執行結果

backend = 'redis:'

# worker, 任務執行單元

# tasks.py

# 定義任務

def add(x, y):

res = x + y

print(f'+=')

return res

def minus(x, y):

res = x - y

print(f'-=')

return res

# add_task.py

from .tasks import add, minus

# 在業務邏輯中觸發非同步任務

add_results = add.delay(10, 20)

# 任務執行結果的id

print(add_results.id)

# get_result.py

from .add_tasks import add_results

from celery.result import asyncresult

if __name__ == '__main__':

if async.successful():

result = async.get()

print('任務執行成功')

print(result)

elif async.failed():

print('任務失敗')

elif async.status == 'pending':

print('任務等待中被執行')

elif async.status == 'retry':

print('任務異常後正在重試')

elif async.status == 'started':

print('任務已經開始被執行')

from celery_task.tasks import add

from datetime import timedelta, datetime

# 新增延時任務, 10秒後執行

# 任務執行結果的id

print(add_results.id)

注意: 週期任務是通過celery beat來週期性新增的, , 因此啟動worker服務之後, 還要重開乙個cmd視窗啟動beat服務:celery beat -a celery_task -l info

# celery.py

from celery import celery

from datetime import timedelta

from celery.schedules import crontab

# 配置訊息中介軟體, 用來接收任務

broker = 'redis:'

# 配置backend, 用來儲存任務執行結果

backend = 'redis:'

# worker, 任務執行單元

# 時區

'add-task': ,

'minus-task':

}

在根目錄下建立包資料夾celery_task

"""

project

├── celery_task # celery包

├── __init__.py # 包檔案

├── celery.py # celery連線和配置相關檔案,且名字必須是celery.py

└── tasks.py # 所有任務函式

"""

# 1.載入django配置環境

import os

os.environ.setdefault("django_settings_module", 'luffyapi.settings.dev')

# 2.載入celery配置環境

from celery import celery

broker = 'redis:'

backend = 'redis:'

# 時區

# utc

from datetime import timedelta

'update-banner-cache':

}

from home.models import banner

from home.serializers import bannermoderserializer

from django.conf import settings

from django.core.cache import cache

def update_banner_cache():

print('lalal')

banner_query = banner.objects.filter(is_delete=false, is_show=true).order_by('-order').all()

serializer_obj = bannermoderserializer(data=banner_query, many=true)

banner_data = serializer_obj.data

for banner in banner_data:

banner['image'] = settings.base_url + banner.get('image')

cache.set('banner_cache', banner_data)

return true

celery系列 一 celery 相關配置

celery result backend amqp 官網優化的地方也推薦使用c的librabbitmq celery task result expires 1200 celery任務執行結果的超時時間,我的任務都不需要返回結果,只需要正確執行就行 celeryd concurrency 50 c...

celery 執行celery定時任務

場景 在虛擬機器上執行 python django celery redis 的定時任務 可能遇到的問題 如果在執行過程中,定時任務突然退出,並報以下錯誤,錯誤顯示,沒有許可權訪問一些目錄檔案 解決方案 1 關閉當前redis服務 在step 3中有描述如何關閉 2 以root使用者執行啟動redi...

語言翻譯成組合語言 收下這十點C語言入門須知

一提到語言這個詞,人們自然想到的是像英語 漢語等這樣的自然語言,因為它是人和人相互交流資訊不可缺少的工具。大家聽到我們之間交流的就是漢語,英語。比如一些單詞是英語,主要還是用漢語在交流。而今天,計算機遍布了我們生活的每乙個角落,除了人和人之間的相互交流之外,我們必須和計算機交流。用什麼樣的方式和計算...