最近、Djangoチャネルについて知りました。チャネルとセロリの違い、およびセロリとチャネルの使用場所を誰かに教えてもらえますか。
Channels in Django=は、リクエストの非同期処理を目的としています。
標準モデルDjangoはRequest-Responseを使用していますが、これには大きな制限があります。そのモデルの制限外には何もできません。
複数のメッセージの送信、セッションの管理などができるように、チャネルはWebソケットのサポートとWebソケットを中心とした複雑なアプリケーションの構築を可能にするようになりました。
Celery は完全に異なるものであり、分散メッセージパッシングに基づく非同期タスクキュー/ジョブキューです。これは主に、タスクをキューに入れ、特定の間隔で実行するようにスケジュールするためのものです。
簡単に言えば、チャネルは、チャットアプリケーションのように 非同期データ通信 が必要なときに使用されます。Celeryは、一定の間隔で特定の種類のニュースのWebをスクレイピングするサーバーなどのタスクとイベントをスケジュールするためのものです。
Djangoチャネルは、Djangoに、WebsocketやHTTP2を含む、単なるHTTPリクエスト以上のものを処理する機能を与えます。これは、非同期で発生する2方向の二重通信と考えてください。ブラウザの更新はありません。複数のクライアントが送信およびwebsocketを介してデータを受信し、Djangoチャネルは、同時にアクセスするクライアントが同時にグループチャットを行うこの相互通信の例をオーケストレーションします。特定のセロリに似た、長時間実行されるコードのバックグラウンド処理を実現できます。範囲、しかしチャネルのアプリケーションはセロリのそれとは異なります。
セロリは、分散メッセージパッシングに基づく非同期タスクキュー/ジョブキューです。だけでなく、スケジュール。簡単に言えば、バックグラウンドでタスクを実行して実行したい、または設定した間隔でタスクを実行してバックで実行する定期的なタスクを作成したい。また、同期的にタスクを起動することも、完了して続行するまで起動して待機することもできます。主な違いは、それらが役立つユースケースとフレームワークの目的にあります
他の答えは、diffを大きく説明しましたが、実際にはChannels&Celeryは、非同期のプールされたタスクを共通に実行できます。
チャネルとセロリはどちらもメッセージとワーカーデーモンのバックエンドを使用します。したがって、同じ種類のものを両方で実装できます。
ただし、Celeryは主に作成され、タスクプーリングのほとんどの問題(再試行、結果のバックエンドなど)を処理できることに注意してください。
Channels は、Djangoを使用し、その機能をHTTPを超えて拡張するプロジェクトです。Webソケット、チャットプロトコル、IoTプロトコルなどを処理します。これは、= Python ASGIと呼ばれる仕様。
チャネルの変更Djangoは、Djangoの同期コアの下および非同期コアを介して非同期コードを織り込み、DjangoプロジェクトがHTTPだけでなく、長時間の接続を必要とするプロトコルも処理できるようにします。 -WebSocket、MQTT、チャットボット、アマチュアラジオなど。
これは、Djangoの同期的で使いやすい性質を維持しながらこれを行い、コードの記述方法を選択できるようにします-Djangoビュー、完全に非同期、または両方の混合のようなスタイルで同期これに加えて、Djangoの認証システム、セッションシステムなどとの統合を提供し、HTTPのみのプロジェクトを他のプロトコルに拡張することをこれまで以上に簡単にします。
また、このイベント駆動型アーキテクチャーをチャネルレイヤーにバンドルします。チャネルレイヤーは、プロセス間の通信を容易にし、プロジェクトを異なるプロセスに分離できるようにします。
Celery は、分散メッセージパッシングに基づく非同期タスクキューです。リアルタイム操作を実行し、一部のタスクを後で実行するようにスケジュールする機能を提供します。これらのタスクは非同期または同期で実行できます。つまり、バックグラウンドで実行するか、チェーンして、別のタスクが正常に実行された後に1つのタスクが実行されるようにすることができます。
Djangoチャンネル:
hTTPを超えて-WebSocket、チャットプロトコル、IoTプロトコルなどを処理します。
クライアントとサーバーの間でメッセージを受け渡します(全二重接続)
HTTPおよびWebソケット要求を処理する
非同期
例:
セロリ:
これは、リアルタイム処理に重点を置いたタスクキューであり、タスクスケジューリングもサポートしています。
長時間実行されるバックグラウンドタスクを実行する
定期的なタスクを実行する
非同期
例:
さらに読む