mcpField
A
async-jobs

async-jobs

github.com/yonatangross開発299186 回インストール今日更新
リポジトリ

async-jobs について

Celery、ARQ、Redis、Temporalを使ったバックグラウンドジョブを計画するバックエンド開発者向けのスキルです。製品マニュアルの再掲ではなく、独自の設定、閾値、順序制約、再試行、スケジューリング、監視、ツール選定に焦点を当てています。

主な機能

  1. 01設定とタスクキューの指針
  2. 02CanvasとTemporalのワークフローパターン
  3. 03再試行、冪等性、スケジューリングのルール
  4. 04監視と結果バックエンドの実践
  5. 05ジョブ処理方式のツール選定

活用シーン

  1. 01タスクキューの構築とバックグラウンド処理の振り分け
  2. 02一時的な障害に備えた再試行と冪等性の設計
  3. 03定期ジョブのスケジュールと重複の回避
  4. 04バックエンドに適したジョブ処理方式の選定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yonatangross/orchestkit --skill async-jobs

インストール後、Claude Code で/async-jobsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

metadata.json
test-cases.json
references/
capability-details.md
anti-patterns.md
quick-start-examples.md
celery-config.md
ork-delta.md
rules/
_template.md
celery-canvas.md
_sections.md
jobs-task-queue.md
jobs-monitoring.md
temporal-workflows.md
jobs-scheduling.md
temporal-activities.md

詳細

非同期ジョブ

Celery、ARQ、Redis、Temporal によるバックグラウンドタスク処理。このスキルはマニュアルではなくラッパーです。Celery と ARQ はそれぞれの製品について十分なドキュメントを提供しているため、ここでは私たち独自の差分、しきい値、実用的な設定、順序に関する制約、ツール選択のルールを扱います。製品の仕組みについては、繰り返し説明せずリンクを示します。

まず Read("references/ork-delta.md") を実行してください。

クイックリファレンス

トピック独自の内容が記載されている場所
設定references/celery-config.md、rules/jobs-task-queue.md
タスクのルーティングreferences/ork-delta.md(キューの分類、プリフェッチの段階、Redis の優先度)
Canvas ワークフローrules/celery-canvas.md
再試行戦略references/ork-delta.md(バックオフの上限、冪等性のレイヤー、ロックの TTL)
スケジューリングrules/jobs-scheduling.md、references/ork-delta.md(Beat のプロセスモデル)
モニタリングreferences/ork-delta.md(アラートのしきい値、ヒストグラムのバケット)
結果バックエンドrules/jobs-monitoring.md、references/ork-delta.md(戻り値の契約)
ARQ のパターンrules/jobs-task-queue.md、references/ork-delta.md(予算、プールの所有権)
Temporal ワークフローrules/temporal-workflows.md
Temporal アクティビティrules/temporal-activities.md

10 のトピック領域、rules/ にある 6 つのルールファイル、references/ork-delta.md にあるプロジェクト独自の差分。

クイックスタート

@app.task(bind=True, max_retries=3, default_retry_delay=60)
def process_payment(self, order_id: str):
    try:
        return gateway.charge(order_id)
    except TransientError as exc:
        raise self.retry(exc=exc, countdown=2 ** self.request.retries * 60)

Celery の再試行タスクと ARQ/FastAPI の統合パターンの例をさらに読み込むには、Read("references/quick-start-examples.md") を実行してください。

上流の適用範囲(内容を繰り返さないでください)

製品の仕組みを確認する必要がある場合は、以下を参照してください。右側の列に記載されている内容をここに残すのは、上流のドキュメントでは把握できない、独自のしきい値、実際に使用する設定、または順序に関する制約だからです。

トピック公式ドキュメント独自の内容を残す場所
Celery の設定、シリアライザー、時間制限、ワーカーフラグhttps://docs.celeryq.dev/en/stable/userguide/configuration.html and .../optimizing.htmlreferences/celery-config.md、rules/jobs-task-queue.md
キュー宣言、ルータークラス、Redis の優先度の仕組みhttps://docs.celeryq.dev/en/stable/userguide/routing.htmlreferences/ork-delta.md
chain / group / chord / signature のセマンティクスhttps://docs.celeryq.dev/en/stable/userguide/canvas.htmlrules/celery-canvas.md に独自の canvas の範囲を記載します。chord での si() の使い方に関するガイダンスは未検証で、異論もあります。これに依拠する前に、引数の受け渡し動作を上流の canvas ページで確認してください
autoretry_for、retry_backoff、Reject、タスクの基底クラスhttps://docs.celeryq.dev/en/stable/userguide/tasks.htmlreferences/ork-delta.md、rules/jobs-task-queue.md
Beat のスケジュール、crontab の構文、DatabaseSchedulerhttps://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html and https://django-celery-beat.readthedocs.io/en/latest/rules/jobs-scheduling.md に独自の beat_schedule の形式を記載し、references/ork-delta.md にプロセスモデルを記載します
Flower のフラグ、inspect、シグナル名https://docs.celeryq.dev/en/stable/userguide/monitoring.html, https://docs.celeryq.dev/en/stable/userguide/signals.html, https://flower.readthedocs.io/en/latest/config.htmlreferences/ork-delta.md
結果バックエンド、AsyncResult、カスタム状態https://docs.celeryq.dev/en/stable/userguide/configuration.htmlrules/jobs-monitoring.md に独自のステータスエンドポイントと update_state() の使い方を記載します
タスクごとの rate_limit、control.rate_limit、Redis Luahttps://docs.celeryq.dev/en/stable/userguide/workers.html, https://redis.io/docs/latest/develop/programmability/eval-intro/references/ork-delta.md
ARQ の WorkerSettings、enqueue_job、_defer_by / _defer_until、Job のステータスhttps://arq-docs.helpmanual.io/rules/jobs-task-queue.md にワーカーの骨組みを記載し、references/ork-delta.md に予算を記載します
FastAPI の lifespan と依存関係の接続https://fastapi.tiangolo.com/advanced/events/references/ork-delta.md
SET NX EX を使った分散ロックhttps://redis.io/docs/latest/commands/set/references/ork-delta.md

設定

読み込み:Read("references/celery-config.md")。

決定事項推奨事項
シリアライザーJSON(pickle は使用しない)
ACK モード遅延 ACK(task_acks_late=True)
プリフェッチ公平性を重視する場合は 1、スループット重視の場合は 4~8
時間制限soft < hard(540 / 600)
タイムゾーン常に UTC

タスクのルーティング

決定事項推奨事項
キュー数5:critical / high / default / low / bulk
優先度レベル0~9。4 つの Redis 優先度スイッチをすべて同時に設定
ワーカーの割り当てキューごとに専用のワーカーを割り当てる
プリフェッチcritical は 1、high は 2、default は 4、low/bulk は 8
ルーティングルーティングルールが 5 つを超えたらルータークラスを使用

Canvas ワークフロー

読み込み:Read("rules/celery-canvas.md")。

決定事項推奨事項
順次処理s() を使った Chain
並列処理独立したタスクには Group を使用
ファンインChord(本体を実行するには、ヘッダー内のすべてのタスクが成功する必要があります)
入力を無視不変のシグネチャ si() を使用
Chain 内のエラーReject は Chain を停止し、retry は続行します
部分的な失敗Chord のヘッダータスクからエラー辞書を返す

リトライ戦略

判断項目推奨事項
リトライ間隔指数バックオフを使用し、ジッターを有効にして、600s を上限とします
最大リトライ回数一時的なエラーは 3~5 回、恒久的なエラーは 0 回です
冪等性Redis マーカー(TTL は 86400s)とベンダーの冪等性キーを併用します
失敗したタスク手動レビュー用の DLQ を使用します
シングルトンハードタイムリミットより長い TTL を設定した Redis ロックを使用します

スケジューリング

読み込み:Read("rules/jobs-scheduling.md")。

判断項目推奨事項
スケジュールタイプ時刻ベースには Crontab、頻度指定には浮動小数点の間隔を使用します
動的なスケジュールDatabaseScheduler(django-celery-beat)を使用します
重複実行デフォルトは 3600s、長時間ジョブは 7200s の Redis ロックを使用します
Beat プロセス別プロセスにします。埋め込みの --beat は開発用途のみです
タイムゾーン常に UTC を使用します

モニタリング

判断項目推奨事項
ダッシュボード永続ストレージを備えた Flower を使用します
メトリクスPrometheus を task_prerun / task_postrun / task_failure に接続します
ヘルスブローカーへの接続、ワーカーが 1 つ以上あること、キューの深さを確認します
アラートcritical > 100、default > 5000、ワーカー数 < 1
オートスケールキューの深さ > 500

結果バックエンド

読み込み:Read("rules/jobs-monitoring.md")。

判断項目推奨事項
ステータスの保存Redis の結果バックエンドを使用し、ステータスと小さな JSON のみを保存します
大きな結果S3 またはデータベースに保存し、タスクは参照先の dict を返します
進捗update_state() でカスタム状態を使用します
結果のクエリ状態を確認して AsyncResult を使用します

ARQ パターン

読み込み:Read("rules/jobs-task-queue.md")。

判断項目推奨事項
シンプルな非同期処理ARQ(ネイティブの非同期処理)を使用し、max_jobs=10、job_timeout=300 を設定します
プールの所有者FastAPI の lifespan を使用します。リクエストごとに create_pool を呼び出してはいけません
複雑なワークフローCelery を使用します(チェーン、コード、DLQ、タスクごとのレート制限)
プロセス内の短時間処理FastAPI BackgroundTasks を使用します。30s 未満かつ非クリティカルな処理に限ります
LLM ワークフローCelery ではなく LangGraph を使用します

ツールの選定

ツールの比較表(ARQ、Celery、RQ、Dramatiq、FastAPI BackgroundTasks)の全内容は、Read("references/quick-start-examples.md") を読み込んでください。

アンチパターン(禁止)

詳細な一覧は Read("references/anti-patterns.md") を読み込んでください。

主なルール:リクエストハンドラーで長時間タスクを実行しないこと、タスク内で結果を待機してブロックしないこと、Redis に大きな結果を保存しないこと、リトライ対象のタスクでは必ず冪等性を確保すること。

Temporal ワークフロー

読み込み:Read("rules/temporal-workflows.md")。

判断項目推奨事項
ワークフロー IDビジネス上の意味を持たせ、冪等にします
決定性workflow.random()、workflow.now() を使用します
I/O常にアクティビティ経由で行い、直接実行しません

Temporal アクティビティ

読み込み:Read("rules/temporal-activities.md")。

判断項目推奨事項
アクティビティのタイムアウトほとんどの場合、start_to_close を使用します
エラー処理ビジネスエラーはリトライ不可にします
テスト統合テストでは WorkflowEnvironment.start_local() を使用します

関連スキル

  • ork:python-backend - FastAPI、asyncio、SQLAlchemy のパターン
  • ork:langgraph - LangGraph のワークフローパターン(Celery ではなく LLM ワークフローに使用)
  • ork:distributed-systems - レジリエンスパターン、サーキットブレーカー
  • ork:monitoring-observability - メトリクスとアラート

機能の詳細

キーワードインデックスと問題から機能へのマッピングについては、Read("references/capability-details.md") を読み込んでください。

コメント