python と django を使用して、多数の科学モデルを実行するためのフレームワークを作成しています。Python がモデルを実行し、django を使用してステータスを追跡し、Web ページへの出力を作成します。運用モードでは、プラットフォーム全体 (データベース、django 実行可能ファイル) が利用可能であるため、これは正常に機能します。ただし、オフラインで新しいモデルを作成してテストする場合、同僚は環境に接続せずにスタンドアロン コードで作業することがよくあります。次に、djangoの部分が負担になることがよくあります(環境、データベースのセットアップが必要、計算上のオーバーヘッド)。そこで、Django 機能のオンとオフを切り替える方法を探しています。
現在、フレームワーク内の任意のモデルを実行するためのすべての機能を搭載した一般的なクラス iModel と、いくつかの django 呼び出しがあります。子クラスはこのクラスから継承し、モデル固有の機能を含みます。
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "framework.settings")
import django.some.modules
class iModel(iModel):
def run(self):
some django calls (eg. change status in DB to 'running')
self.prepareInputdata()
self.runModel()
some more calls (eg. change status in DB to 'finished')
def prepareInputData(self):
example of some code that is used by all child models
class CATmodel(iModel):
def runModel(self):
some specific code for CAT-model
class DOGmodel(iModel):
def runModel(self):
some specific code for DOG-model
クラス iModel を 2 つのクラスに分割することを考えていました。iModel から継承し、Django 機能を追加する追加のクラス iClassWithDjango()。クラス iModel のラッパーとして。
ファーストクラス
class iModel(Object):
def run(self):
self.prepareInputDate()
self.runModel()
そして二等
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "framework.settings")
import django.some.modules
class iModelWithDjango(iModel):
def run(self):
some django calls (eg. change status in DB to 'running')
super(iModelWithDjango,run)
some more calls (eg. change status in DB to 'finished')
状況 (運用中またはオフライン) に応じて、DOGmodel と CATmodel は resp を継承します。iModelwithDjango() または iModel() から。そのため、実行時に親クラスを動的に変更してください。
実際、私の最大の問題は、django モジュールのインポートを処理する方法です。これがオフライン モードで発生しないようにするにはどうすればよいですか (django 環境が設定されていないために失敗するため)。私の考えは、iModelWithDjango() を (上記のように) 別のモジュール ファイルに入れることでしたが、これを行うにはもっと良い方法があるかもしれません。
たぶん、たくさんの乱雑なコーディングでこれをやってのけることができたかもしれませんが、あなたの何人かが私をきれいなコーディングの練習に導くことができることを望んでいました. どんなアドバイスでも歓迎