セロリを学ぶのは気が遠くなるかもしれません。ドキュメントは包括的ですが、基本的な部分を省略する傾向があります。
この投稿では、Celery の 4 つの主要な概念を定義し、Celery と Kombu の関係について説明し、いくつかのコード例を使用して Celery が実際のアプリケーションでどのように役立つかを説明します。この例では、Django Web フレームワークとその @shared_task デコレーターを使用しますが、この概念は Flask、FastAPI などにも適用できます。
タスク、ブローカー、ワーカー、バックエンド
現在の Celery ドキュメントで、ブローカー または バックエンド とみなされるものを明確に説明している場所を見つけるのは難しいでしょう。しかし、十分に掘れば、定義を推測します。
以下は、Celery を始める前に知っておくべき概念です。
タスク
タスクは、Celery が 非同期 で実行する作業です (この文脈では、「すぐにではない」という意味の派手な言葉です)。 Web アプリケーションでは、ユーザーがフォームを送信した後に電子メールを送信するタスクが考えられます。電子メールの送信には数秒かかる操作があり、リダイレクトする前に電子メールの送信をユーザーに待たせると、アプリケーションが遅く感じる可能性があります。
タスクは Celery のデコレータを使用して定義されます。以下では、@shared_task デコレーターを使用して、send_thank_you_email() を submit_feedback() フォーム送信ハンドラーで使用できる Celery タスクに変換します。
from config.celery import shared_task from django.core.mail import send_mail from django.shortcuts import render, redirect from feedback.forms import FeedbackForm @shared_task def send_thank_you_email(email_address): send_mail( "Thank you for your feedback!", "We appreciate your input.", "noreply@example.com", [email_address], ) def submit_feedback(request): if request.method == "POST": form = FeedbackForm(request.POST) if form.is_valid(): form.save() # Push the task to the broker using the delay() method. send_thank_you_email.delay(form.cleaned_data["email"]) return redirect("/thank-you/") else: form = FeedbackForm() return render(request, "feedback.html", {"form": form})
Celery のデコレータを使用してタスクが定義されると、タスクに late() メソッドが追加されます。フォームが正常に保存された後、上の例では send_thank_you_email タスクが late() メソッドを呼び出していることがわかります。 late() が呼び出されると、send_Thank_you_email タスクとそのデータが ブローカー に送信され、そこに保存され、後で ワーカー によって実行されます。その時点でユーザーはメールで送信されます。
フォームを保存した後に追加の電子メールを送信する必要がある場合、作業を Celery にプッシュする利点がより明らかになります。たとえば、新しいフィードバックを受け取ったことをカスタマー サポート チームに電子メールで送信することができます。 Celery を使用すると、応答に追加の時間がほとんど追加されません。
Celery タスクでは、追加の高度な構成も可能です。電子メールの送信に失敗した場合は、タスクをコーディングして自動的に再試行し、max_retries、retry_backoff、retry_jitter などの設定を構成できます。
ブローカ
Celery Enhancement Proposals の用語集には、メッセージ ブローカー について次のように記載されています。
エンタープライズ統合パターンでは、メッセージ ブローカーを、複数の宛先からメッセージを受信し、正しい宛先を決定し、正しいチャネルにメッセージをルーティングできるアーキテクチャのビルディング ブロックとして定義します。
Celery の目的のために、ブローカー を、作成されたタスクが保存される「メッセージ トランスポート」とみなします。ブローカーは実際にタスクを実行しません。それはワーカーの仕事です。代わりに、ブローカーは、タスクがスケジュールされたときにスケジュールされたタスクが保存され、ワーカーが最終的にタスクを実行するときにからプルされる場所です。ブローカーは Celery が動作するために必須のコンポーネントであり、Celery は 1 つのブローカーにのみ接続します。
Celery のバックエンドとブローカーのページには、サポートされているブローカーの一部がリストされています。また、リストされていない、サポートされている実験的なブローカーもあります (SQLAlchemy など)。これらのブローカー (または「メッセージ トランスポート」) は、Celery が管理する Kombu と呼ばれるメッセージ トランスポート用の Python ライブラリによって管理されます。ブローカーの構成に関する情報を探す場合、Celery のドキュメントではなく Kombu のドキュメントを参照すると役立つ場合があります。
一部のブローカーはタスクのファンアウトや優先度などの高度な機能を備えていますが、他のブローカーは単純なキューとして動作します。
ワーカー
ワーカー は、ブローカーからタスクを取得し、Python アプリで定義されたタスク関数を実行する Celery のインスタンスです。 Celery 自体は Python で書かれているため、Celery はワーカー内で Python コードを実行できます。
多くのワーカーを同時に実行してタスクを実行できます。 celery ワーカー コマンドを実行すると、デフォルトでコンピューターのすべてのコアに対してワーカーが起動されます。コンピューターに 16 コアがある場合、celery ワーカーを実行すると 16 個のワーカーが開始されます。
実行中のワーカーがない場合、メッセージ (タスク) は、ワーカーが実行できるようになるまでブローカーに蓄積されます。
バックエンド
Celery ユーザー ガイドのタスク ページには、バックエンド について次のように記載されています。
If you want to keep track of tasks or need the return values, then Celery must store or send the states somewhere so that they can be retrieved later. There are several built-in result backends to choose from: SQLAlchemy/Django ORM, Memcached, RabbitMQ/QPid (rpc), and Redis – or you can define your own.
TLDR: a backend tracks the outcomes and returned results of async tasks. What does that actually mean, and when could it be useful?
Imagine you are building an accounting app in Django that can generate an annual report. The report could take minutes to generate.
To give your users a more responsive experience, you use an AJAX request to kick off a report generation task. That request returns an ID of the task, which it can use to poll the server every few seconds to see if the report is generated. Once the task is complete, it will return the ID of the report, which the client can use to display a link to the report via JavaScript.
We can implement this with Celery and Django using the following code:
from celery import shared_task from django.http import JsonResponse from django.views.decorators.http import require_http_methods from accounting.models import Asset from accounting.reports import AnnualReportGenerator @shared_task def generate_report_task(year): # This could take minutes... report = AnnualReportGenerator().generate(year) asset = Asset.objects.create( name=f"{year} annual report", url=report.url, ) return asset.id @require_http_methods(["POST"]) def generate_annual_report_view(request): year = request.POST.get("year") task = generate_report_task.delay(year) return JsonResponse({"taskId": task.id}) def get_annual_report_generation_status_view(request, task_id): task = generate_report_task.AsyncResult(task_id) # The status is typically "PENDING", "SUCCESS", or "FAILURE" status = task.status return JsonResponse({"status": status, "assetId": task.result})
In this example, the asset ID returned by generate_report_task() is stored in a backend. The backend stores the outcome and returned result. The backend does not store the status of yet-to-be-processed tasks: these will only be added once there has been an outcome. A task that returns "PENDING" has a completely unknown status: an associated task might not even exist. Tasks will typically return "SUCCESS" or "FAILURE", but you can see all statuses in the Celery status docs.
Having a backend is not required for Celery to run tasks. However, it is required if you ever need to check the outcome of a task or return a task's result. If you try to check a task's status when Celery does not have a backend configured, an exception will be raised.
I hope this post helps you understand the individual pieces of Celery and why you might consider using it. While the official documentation is challenging to grok, learning Celery deeply can unlock new possibilities within your Python applications.
以上がCelery のタスク、ブローカー、ワーカー、バックエンドについて理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonスクリプトがUNIXシステムで実行できない理由には、次のものが含まれます。1)CHMOD XYOUR_SCRIPT.PYを使用して実行権限を付与する不十分な権限。 2)shebangラインが正しくないか欠落している場合、#!/usr/bin/envpythonを使用する必要があります。 3)環境可変設定が誤っていない場合、OS.Environデバッグを印刷できます。 4)間違ったPythonバージョンを使用して、Shebangラインまたはコマンドラインでバージョンを指定できます。 5)仮想環境を使用して依存関係を分離する依存関係の問題。 6)構文エラー、python-mpy_compileyour_script.pyを使用して検出します。

Pythonアレイの使用は、リストよりも大量の数値データの処理に適しています。 1)配列を保存するメモリを保存します。2)アレイは数値的な値で動作するのが高速です。3)アレイフォースタイプの一貫性、4)アレイはCアレイと互換性がありますが、リストほど柔軟で便利ではありません。

listSareのより良い前提条件とmixdatatypes、whilearraysares優れたスナリカル計算砂の砂を大きくしたデータセット。

numpymanagesmemoryforlargearrayseffictificleusing biews、copies、andmemory-mappedfiles.1)rewsinging withotingcopying、directmodifying theoriginalArray.2)copiescanbecreatedwithcopy()methodforpreservingdata.3)Memory-MapplehandLemassiutasedatasetasedatasetasetasetasetasetasedas

listsinpythondonotrequireimportingamodule、whilearrays fromthearraymoduledoneedanimport.1)listsarebuiltin、versatile、andcanholdmixeddatypes.2)araysaremoremory-efficient-fornumerumerumerumerumerumerdatabutでき、対象となるンドベフェフサメタイプ。

Pythonlistscanstoreanydatatype,arraymodulearraysstoreonetype,andNumPyarraysarefornumericalcomputations.1)Listsareversatilebutlessmemory-efficient.2)Arraymodulearraysarememory-efficientforhomogeneousdata.3)NumPyarraysareoptimizedforperformanceinscient

heouttemptemptostoreavure ofthewrongdatatypeinapythonarray、yure counteractypeerror.thisduetothearraymodule'sstricttypeeencultionyを使用します

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ホットトピック









