Celery 教程:Python 開發人員必須學習的技術

在本教程中,我們將討論最流行的、Python 開發人員必須學習的技術。Python 開發人員協會中的每個人都已經了解了 Celery,或者可能已經實現了至少一次。

在快速互聯網時代,用戶希望瞬間載入頁面,幾秒鐘就能得到結果。小任務可以在一秒或幾微秒內執行,但重任務可能需要幾秒甚至一分鐘。

那麼問題來了,當我們複雜的任務還在載入的時候,我們如何提供快速的用戶體驗呢?

下面是非同步編程的作用。Celery 用於任務的並行執行。

當中央處理器處於理想狀態時,Celery 提供了在後台運行程序/作業的工具。在深入探討這個話題之前,讓我們先了解一下 Celery 的核心概念,以及我們為什麼要使用它。

在本教程中,我們將討論 Celery 的以下概念。

  • Celery 是什麼?
  • 它是如何工作的?
  • 什麼是任務隊列?
  • 什麼是消息代理?
  • 這為什麼有用?
  • 它是如何工作的?
  • Celery 的特點
  • Celery 入門

Celery 是一個開源的 Python 庫,用於非同步運行任務。它是一個任務隊列,保存任務,並以適當的方式將其分配給工人。它主要關注實時操作,但也支持調度(運行定期間隔任務)。它驚人地增強了最終用戶的活動。Celery 介紹了rabbtmq**Redis 等各種消息經紀人。**

Celery 結合了各種網路框架,包括 Flask、Pylons、web2py、Tryton 和 Tornado。

假設我們需要每分鐘(小時)訪問一次 API,或者我們想在一天結束時發送多封電子郵件。Celery 可以很容易地安排這類周期性任務。

讓我們看另一個場景:用戶發送請求,頁面載入時間過長。同時,Celery 通過在同一台伺服器或不同的伺服器上運行部分延期任務的功能來減少頁面載入時間。

Celery 的工人可以通過回調更新用戶界面,處理文件,發送電子郵件,修改資料庫等等。

Celery 的主要優點是我們的應用可以繼續響應客戶端請求。因此最終用戶不必不必等待。

在傳統的 HTTP 請求-響應周期中,當我們通過客戶端向伺服器發送請求時,伺服器向客戶端發送響應。它適用於小任務,但當我們試圖載入大任務時,它可能會變得很慢。因此,我們需要實現一個可以減少載入時間的功能。

讓我們了解 Celery 的工作場景。

Celery 通過信息相互作用;通常經紀人是客戶和工人之間的中間人。Celery 的內向型工作被確認為生產者和消費者模式。Celery 有三大高級元素。

生產者- 生產者是管理網路請求的【網路節點】。當應用正在處理時,任務被分配給 Celery 意味著被強制進入任務隊列。

消費者- 消費者是【工人節點】監控隊列頭,工人承擔任務並執行。工人也可以執行各種任務;因此,他們也可以扮演生產者的角色。

Queue – 它基本上是一個消息代理,充當生產者和消費者之間的橋樑。它本質上是在 web 應用和 Celery 工人之間傳遞消息。Celery 得到了 RabbitMQ 和 Redis 的廣泛支持,也幫助了動物園管理員,亞馬遜 SQS,但能力有限。

Celery 是一種方便的結構,通過延遲的任務減少生產負荷,因為它準備非同步和計劃的工作。以下是 Celery 的一些重要特徵。

  • 開源庫- Python Celery 是開源免費軟體。這個特性吸引了組織或開發人員使用 Celery 來解決他們的任務,而無需支付一分錢。
  • 直接安裝- 這是一個輕量級的簡單庫,可以輕鬆安裝。我們可以使用「pip install-U Celery」命令從終端安裝。
  • 調度- 我們可以使用日期時間模塊以及Celery 節拍來指定運行任務的特定時間。Celery 拍可以定期觸發任務。我們可以基於簡單的時間間隔對重複事件使用周期性任務。
  • 經紀人支持- Celery 支持多個消息經紀人,通俗的說就是rabbtmq,它也支持亞馬遜 SQS,但是在某些功能上有所欠缺(監控和遠程控制)。
  • 與網路框架的集成- Celery 還與各種 Python 網路框架相結合,如金字塔、掛架、Django、Tornado、Trylons 和 Flask。
  • Fast – Celery 可以在一分鐘內處理數百萬個任務。
  • 作品流- 它可以使用一組被稱為「畫布」的高級原語來組合簡單和複雜的作品流。

在本教程中,我們將使用 Django 實現 Celery,在這裡我們將創建一個簡單的任務隊列。讓我們從下面的步驟開始。

首先,我們將在Celery _django 文件夾中創建一個名為learn _ Celery的 Django 項目。但首先我們將創建虛擬環境。所有依賴項都將存儲在虛擬環境中。

創建虛擬環境後,我們將使用以下命令激活。

使用以下命令安裝 Django。

安裝Django 後,創建項目。我們正在使用下面的命令創建名為學習 Celery的項目。

如果您不熟悉如何在 Django、中創建項目或應用,可以訪問我們的 Django 教程。現在,我們準備在虛擬環境中安裝 Celery。

我們可以使用下面的命令安裝 Celery。

Celery 安裝完成後,我們將在 Django 項目中配置 Celery。

打開項目的 settings.py 文件並添加以下配置。我們使用 redis 作為消息代理。

代理是使應用、系統和服務能夠通信和共享信息的獨立服務。讓我們簡化這個術語,我們通過消息隊列將任務分配給工作人員。消息隊列是一種先進先出的數據結構,這意味著首先存儲的消息將首先被執行。所有任務將按照我們添加的順序執行。

在本教程中,我們將使用 Redis 消息代理。

Windows 中的 Redis 安裝

在 Mac/Ubuntu 中安裝 Redis 非常簡單,但對 Window 來說有點棘手。所以這裡我們描述如何在 Windows 中安裝 redis。

  • 訪問 Github 鏈接https://github.com/tporadowski/redis/releases,點擊 Redis-x64-5.0.14.msi 。它將下載。msi 文件。
  • 點擊下載的設置。它會自動將 redis 安裝在你的 C: drive 系統中。安裝完成後,打開 redis-cli 並鍵入 PING。

運行 Celery 程序也需要 Redis 依賴。我們可以使用下面的命令安裝 redis 依賴項。

安裝完成後,使用以下命令啟動伺服器。

我們可以通過在終端中鍵入以下命令來測試 Redis 是否正常工作。

如果用 PONG 回復,工作正常。

現在打開 Django 項目中的 Celery. py 文件,並添加下面的代碼。

Celery 皮


import os

from celery import Celery
from celery.schedules import crontab

# Set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'learn_django.settings')

#pass the project name in Celery(project_name)
app = Celery('learn_django')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

#Celery Beat Settings
app.conf.beat_schedule = {
    'send-mail-every-day-at-8' :  {
        'task': 'emailExample.tasks.send_mail_func',
        'schedule': crontab(hour = 15, minute = 42),

    }

}

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

Celery 任務可以在 Django 應用/項目的 tasks.py 中創建。我們使用下面的命令在工作目錄中創建一個應用。


C:\Users\User\Desktop\celery_django>python manage.py startapp celeryApp .

一旦創建了應用,創建一個任務。複製文件並創建一個任務。這些任務是用 Celery 調用的常規 Python 函數。例如,我們創建了一個函數來列印 1 到 10 的整數。


rom celery import shared_task

@shared_task(bind=True)
def test_func(self):
    for i in range(10):
        print(i)
    return "Completed"

現在在 view.py 文件中創建一個視圖。

view.py


from django.http import HttpResponse
# importing task from tasks.py file
from .tasks import test_func

# Create your views here.

def test(request):
    # call the test_function using delay, calling task
    test_func.delay()
    return HttpResponse("Done")

現在我們將把這個視圖映射到 urls.py 文件中的 URL。

celery app/URL . py


from django.urls import path

urlpatterns = [
    path('', test, name='test'),

pip install django-celery-result

現在,我們準備執行第一個非同步任務。現在運行 python manage.py runserver ,點擊本地主機鏈接 http://127.0.0.1:8000/。

現在打開新終端,導航到項目目錄,激活虛擬環境。要啟動 Celery 工人,請運行以下命令。


PS D:\celeryPython> celery -A CeleryDjango.celery worker --pool=solo -l info

正如我們所看到的,我們的 Celery 已經開始並準備執行後台工作。默認情況下,Redis 消息代理運行在 6379 埠上。


[2022-01-07 23:10:27,920: INFO/MainProcess] Connected to redis://127.0.0.1:6379//
[2022-01-07 23:10:27,936: INFO/MainProcess] mingle: searching for neighbors
[2022-01-07 23:10:29,007: INFO/MainProcess] mingle: all alone
[2022-01-07 23:10:29,029: WARNING/MainProcess] C:\Users\DEVANSH SHARMA\.virtualenvs\celeryPython-O5XHNBO2\lib\site-packages\celery\fixups\django.py:203: UserWarning: Using settings.DEBUG leads to a memory
            leak, never use this setting in production environments!
  warnings.warn('''Using settings.DEBUG leads to a memory

每次當我們訪問 http://127.0.0.1:8000/向 Django 伺服器發出請求時,我們應該會看到響應,Celery 會在後台非同步執行我們在 task.py 文件中定義的任務。可以在 Celery 終端監控。

Celery 是一個強大的作業隊列,可以在後台運行任務。它最常用於發送頻繁的電子郵件。但是,它可以多種方式使用。我們可以排隊;在手頭長期運行的任務上使用數據塊,並定義執行任務的時間。

在本教程中,我們使用 Django 以 Celery 為例。我們已經定義了 Celery 的基本概念及其工作原理。我們還指定了如何與 Django 一起實現 Celery。您可以參考本教程,並使用 Celery 來運行您的非同步任務。


原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126622.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:09
下一篇 2024-10-03 23:09

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python熱重載技術

    Python熱重載技術是現代編程的關鍵功能之一。它可以幫助我們在程序運行的過程中,更新代碼而無需重新啟動程序。本文將會全方位地介紹Python熱重載的實現方法和應用場景。 一、實現…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Python包絡平滑技術解析

    本文將從以下幾個方面對Python包絡平滑技術進行詳細的闡述,包括: 什麼是包絡平滑技術? Python中使用包絡平滑技術的方法有哪些? 包絡平滑技術在具體應用中的實際效果 一、包…

    編程 2025-04-29

發表回復

登錄後才能評論