8

私は旅行会社で働いており、チームに定期的にメールを送信する必要があります。

それ以来、私はdjango管理コマンドを使用し、crontabを使用してそれらを実行しています。セロリの機能について読んでいましたが、なぜセロリを使用する必要があるのか​​ 理解するのが本当に難しいと感じています。

また、私のdjangoプロジェクトとデータベースへの別の追加になるため、パフォーマンスが低下しますか?

4

1 に答える 1

8

セロリを使用する必要はないと思います。あなたの場合、Cronはまだ問題ないように思えますが、セロリを試してみることをお勧めします。

私にとって、Celery は [非同期] [分散] タスク キュー用の Python モジュールです。複数のマシンで実行されている複数のプロセスに長いタスクをディスパッチできます (ただし、1 つのマシンで 1 つのプロセスを実行しても問題ありません)。時間がかかる処理 (サムネイルの生成、外部 API との対話、複雑なレポートの生成など) が必要な場合、Celery を使用して、ユーザーの HTTP リクエストをブロックすることなくバックグラウンドで実行できます。

crontab に対する Celery のいくつかの利点:

  • 少なくとも1つのセロリワーカーが空いているときに、タスクを非同期で実行できます
  • 複数のプロセス/マシンにうまくスケーリングします
  • celerybeat は crontab に似ています。ただし、settings.py で Python 構文を使用して、特定の日時または間隔でタスクをスケジュールできます。
  • レート制限を適用できます(たとえば、ある種の優先順位付けのために)
  • Flowerのような監視ツールがあり、どのタスクが失敗し、何が成功したかについての適切なアイデアを提供します

セロリの欠点:

  • セットアップには時間がかかる場合があります。キュー ブローカーをセットアップし、本番環境でワーカーを悪魔化する必要があります。cronはすでにそこにあります
  • 各ワーカー プロセスは、Django プロセスとほぼ同じ量の RAM を使用する可能性が高く、これには費用がかかるか、単に AWS の無料利用枠で Celery を実行するのに十分な RAM がない可能性があります。

また、単にメールを送信するだけの場合は、Postmarkなどの有料サービスの使用を検討できます(私はそれらと提携していません)。これは、メールのスロットリングを処理します。

于 2013-06-18T14:32:31.747 に答える