8

アプリケーションでシグナルがどのように機能するか (およびシグナルがどのように機能するか) を理解するのに苦労しています。これらは、(私の現在の知識では)適用されると私が推測する3つの領域です。

  1. レポートのために XML をリモート サーバーに送信します (トランザクションの完了後)。
  2. ユーザーが画像をアップロードした後、画像のサイズを変更し、サムネイルを S3 にアップロードします。
  3. ユーザーが自分のアカウントからイメージ オブジェクトを削除した後、S3 から古いイメージを削除します。

私は完全にベースから外れていますか(私はそうかもしれません)。シグナルとマルチスレッドが混同されていますか? もしそうなら、彼らはそこのアプリケーションで比較しますか? デカップリング専用ですか?また、それらを早期にインスタンス化し、ローカル関数を使用しないようにするのはどうですか (ガベージ コレクションが発生するため)。誰かがそれについて詳しく説明できますか?心配しなくてもいいように、それらをすべてリクエスト ミドルウェアに入れる必要がありますか?

4

4 に答える 4

17

Django シグナルはA、イベントに応答してアクションを実行する方法Eです。

非現実の世界では、イベントEが発生するコードを変更し、アクションを実行するコードを追加することで、シグナルの使用を避けることができますA

問題は、そうすることで、保守性、読みやすさ、およびその他の多くのソフトウェアエンジニアリングの形容詞が失われることです:)

シグナルを使用すると、イベントが発生した場所や方法から独立して同じことを行うことEができ、保守性、読みやすさなどを可能にする巧妙な方法で行うことができます...

はい、信号がデカップリングを可能にするのに役立つと言うのは本当だと思います。

(マルチスレッドについても言及しました。シグナルが同時に実行され、非常に迅速に実行されるため、シグナルが優れていると考えているため、そうした場合...まあ...それらが同時に実行されるかどうかはわかりませんが、とにかく私は本当にそうは思いませんこれは、django シグナルが役立つ点です)

シグナルを利用する良い方法の例は、django でユーザーに他の情報を保存したい場合、ユーザープロファイルを使用する必要があるという事実についてです。この場合、ドキュメント自体は、新しく作成されたユーザーに空のユーザープロファイルを追加するためだけに、新しいユーザーの作成に応答してシグナルを登録すると便利な場合があることを示しています。

于 2010-01-19T21:35:26.717 に答える
5

役立つ例を次に示します。

モデル インスタンスを保存するときに何らかのアクションを実行する必要があるとします。ただし、このアクションは、モデルまたはモデル インスタンス自体とは直接関係ありません。したがって、アクションのコードをモデルの save() メソッドに入れることはほとんど意味がありません。不要なコードの結合や乱雑さを引き起こす可能性があります。代わりに、アプリケーション内の別の場所 (または別のアプリケーション内) でシグナル ハンドラーを作成することができます。

于 2010-01-19T21:57:51.503 に答える
3

Celeryのような非同期タスク キューのようなものを使用して、タスク 2 と 3 (画像のもの) を実行します。

これはマルチスレッドに似ています。

于 2011-10-05T23:23:11.760 に答える