Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Celeryの紹介と本番運用のTips
Search
Hank Ehly
August 24, 2023
Programming
0
800
Celeryの紹介と本番運用のTips
Hank Ehly
August 24, 2023
Tweet
Share
More Decks by Hank Ehly
See All by Hank Ehly
Fivetranでデータ移動を自動化する
hankehly
0
570
ChatGPTを活用した 便利ツールの紹介
hankehly
1
1.3k
Efficient Energy Analytics with Airflow, Spark, and MLFlow
hankehly
0
310
Deferrable Operators入門
hankehly
0
610
【初心者/ハンズオン】Dockerコンテナの基礎知識
hankehly
0
500
Compositeパターン: オブジェクトの階層関係をエレガントに表現する方法
hankehly
0
300
10/29 Airflowの基礎を学ぶハンズオンワークショップ
hankehly
0
240
システム/データ品質保証のための Airflow 活用法
hankehly
0
590
海外の記事からコードレビューのBest Practiceを集めてみました
hankehly
0
960
Other Decks in Programming
See All in Programming
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
660
TDD 実践ミニトーク
contour_gara
0
150
画像コンペでのベースラインモデルの育て方
tattaka
3
1.9k
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
13
3.2k
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
2
1.4k
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
200
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
110
AIエージェント開発、DevOps and LLMOps
ymd65536
1
350
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
600
パスタの技術
yusukebe
1
400
一人でAIプロダクトを作るための工夫 〜技術選定・開発プロセス編〜 / I want AI to work harder
rkaga
13
2.8k
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Become a Pro
speakerdeck
PRO
29
5.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
820
Code Review Best Practice
trishagee
70
19k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
Music & Morning Musume
bryan
46
6.7k
Balancing Empowerment & Direction
lara
2
590
Making Projects Easy
brettharned
117
6.3k
A Tale of Four Properties
chriscoyier
160
23k
Transcript
Celeryの紹介と 本番運用のTips 2023/08/23 (水)
よろしくお願いします • Hank Ehly(ハンク・イーリー) • Slalom株式会社(スラロム) • Data & Analytics
シニアコンサルタント • https://hankehly.com • https://qiita.com/hankehly • https://github.com/hankehly • https://medium.com/@hankehly • https://www.twitter.com/hankehly • https://www.linkedin.com/in/hankehly
アジェンダ 1. Celeryの What・Why・Where・How 2. 本番運用の Tips
CeleryのWhat・Why・Where・How
• PythonのタスクキューのOSSフレームワーク • オープンソース(★22k、1,000以上のコントリビュータ、人気) What is Celery Celeryクライアント Celeryブローカー Celeryワーカー(複数可能)
他もある…
What is Celery (contd.) 非同期的に行われる
Why use Celery 計算・レポート出力
Why use Celery 計算・レポート出力
Why use Celery 計算・レポート出力
Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
• ウェブサーバーにたくさん仕事さ せると、他のリクエストへの応答 が遅くなり、CPU/メモリー使用 率が高くなる Why use Celery (contd.) ウェブサーバーの状況
ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
• ウェブサーバーにたくさん仕事さ せると、他のリクエストへの応答 が遅くなり、CPU/メモリー使用 率が高くなる • Celeryワーカーに仕事を渡すと、 ウェブサーバーのリソースを節約 できて、応答を早くすることができ る
Why use Celery (contd.) ウェブサーバーの状況 ウェブサーバー に仕事させる時 Celeryに仕事 を委託する時 レスポンス時間
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
Where use Celery Eメール送信 MLモデル 予測処理 計算処理 →レポート出力 ポーリング処理 (定期的な状況確認)
Celeryが使えるワークロード MLモデル学習 →S3保存
How to use Celery 1. Install from celery import Celery
app = Celery('tasks', broker='redis://...') @app.task def add(x, y): return x + y pip install celery 2. アプリケーション定義 Celeryクライアント Celeryブローカー Celeryワーカー(複数可能) 例えば…
How to use Celery 3. ワーカーを立ち上げる celery -A tasks worker
from tasks import add >>> result = add.delay(4, 4) # 呼び出す >>> result.get() # 終わるまで待つ 4. タスクを呼び出す Celeryクライアント Celeryブローカー Celeryワーカー(複数可能) 例えば… ※複数のワーカーを使う場合は環境ごとに実行
本番運用のTips
1. ヘルスチェックは「ping」コマンドを使おう celery -A myapp inspect ping --destination celery@${HOSTNAME} 設定項目
設定値 interval 30 timeout 15 startPeriod 10 retries 5 ヘルスチェックの実行間隔 (ゆるめな設定がおすすめ)
2. 回復可能なエラーが起きたら再実行しよう
2. 回復可能なエラーが起きたら再実行しよう
3. ブローカーの選定 評価ポイント Redis RabbitMQ SQS リモートコマンド (pingなど) ◯ ◯
X Taskの結果保存ができ る ◯ △ X メッセージを送れなかっ たら、どうなる? △ 再配信されない ◯ 再配信される ◯ 再配信される ヘルスチェックどうする?? データロスが(より) 起きやすい
4. モニタリングツールを入れよう flowerはCeleryワーカーの健 康状態を監視するツール Celeryワーカー・実行中のタス クの状況を可視化 デバッグ・パフォーマンスチュー ニングに役立つ コンテナイメージ・バイナリのデ プロイ方法はブログ記事まで
…→ (flowerの管理画面)
5. Spotインスタンスの中断対策 @app.task def not_atomic_not_idempotent_task(): delete_rows() insert_rows() now = int(time.time())
create_file(name="backup-{now}.csv") @app.task def atomic_and_idempotent_task(filename): with transaction.atomic(): delete_rows() insert_rows() create_file(name=filename) コケたらシステムは変な状態のまま (リトライできない) コケても何度でもリトライできる! 1. タスクを安全にリトライできるように実装する(アトミック・冪等である)
5. Spotインスタンスの中断対策 @app.task def not_atomic_not_idempotent_task(): delete_rows() insert_rows() now = int(time.time())
create_file(name="backup-{now}.csv") @app.task def atomic_and_idempotent_task(filename): with transaction.atomic(): delete_rows() insert_rows() create_file(name=filename) コケたらシステムは変な状態のまま (リトライできない) コケても何度でもリトライできる! 1. タスクを安全にリトライできるように実装する(アトミック・冪等である) 2. 自動再スケジューリングの必須設定 task_acks_late True task_reject_on_worker_lost True タスク終了後にAckする Celeryワーカーが異常終了し たら、タスク再実行してね
5. Spotインスタンスの中断対策 3. 目指すべきタスクの実行時間は …(ブログ記事までお願いします!)
ご清聴ありがとうございます • Hank Ehly(ハンク・イーリー) • Slalom株式会社(スラロム) • Data & Analytics
シニアコンサルタント • https://hankehly.com • https://qiita.com/hankehly • https://github.com/hankehly • https://medium.com/@hankehly • https://www.twitter.com/hankehly • https://www.linkedin.com/in/hankehly 他のTipsはここ