5

これが不可能かもしれないことを喜んで受け入れますが、それは賢明なことではありませんが、作成したオブジェクトへの永続的な参照を保持することは可能ですか?

たとえば、私のビューのいくつかには、次のようなコードがあります (わかりやすくするために簡略化しています)。

api = Webclient()
api.login(GPLAY_USER,GPLAY_PASS)
url = api.get_stream_urls(track.stream_id)[0]

client = mpd.MPDClient()
client.connect("localhost", 6600)
client.clear()
client.add(url)
client.play()
client.disconnect()

apiプロジェクト全体で参照を1 つだけ保持できればclient、特にgmusicapi. で宣言できますsettings.pyか? (これはひどい考えだと思います)、または他の方法で永続的な接続を維持しますか?

理想的にはget_api()、既存のオブジェクトがまだ問題ないことを確認し、それを返すか、必要に応じて新しいオブジェクトを作成するような関数を用意します。

4

3 に答える 3

12

ほぼ確実に複数のサーバー プロセスが存在することになり、オブジェクトはプロセス間で簡単に共有されないため、アプリケーションごとに 1 回インスタンス化されたものを持つことはできません。ただし、プロセスごとに 1 つは間違いなく可能であり、価値があります。これを行うには、関連するファイル (例: views.py) でモジュール レベルでインスタンス化するだけです。つまり、Django が最初にそのファイルを (そのプロセスで) インポートしたときに自動的にインスタンス化され、そのファイルでグローバル変数として参照できます。プロセスが続く限り存続し、新しいプロセスが作成されると、新しいグローバル変数がインスタンス化されます。

于 2013-08-09T09:15:48.540 に答える
0
  1. アプリケーション オブジェクトのプロパティ、またはプロジェクトのトップ レベルで宣言されている他のアプリケーション オブジェクトのプロパティにすることができます。
  2. それらを最初のインポートでインスタンス化され、残りの部分で使用されるクラスに入れると、いくつかのモジュールでインポートしてアクセスできます。

いずれにせよ、彼らは処刑された長さの人生を持つでしょう。

于 2013-08-08T16:35:39.043 に答える