私はDjangoのWebサイトで働いており、自動インストーラとカスタムテンプレートシステムを使ってFCGIをセットアップしました。Django/Python/FastCGIプロセスの持続時間はどのくらいですか?
私は今設定したので、各ビューは、ロード時にのテンプレートファイルにバインドされたクラスのインスタンスであり、実行時間ではありません。それはクラスはデコレータを経由して、テンプレートにバインドされ、次のとおりです。私は気づいた
@include("page/page.xtag") # bind template to view class
class Page (Base):
def main(self): # main end-point to retrieve web page
blah = get_some_stuff()
return self.template.main(data=blah) # evaluates template using some data
一つは、以来FCGIは、新しいプロセスを作成し、すべてのモジュール/クラスごとに要求を再ロードしないことである、テンプレートに変更再起動するまで(つまり、pythonファイルを編集/保存するまで)自動的にウェブサイトに表示されません。
ウェブページには、ファイルシステムの.txtファイルに格納されている多数のデータも含まれています。たとえば、大きな断片を別のファイルから読み込むのではなく、テンプレートに混乱させたり、データベースを編集したりするのに不便です。
かなりのすべてをスピードアップclass XLoad:
rawCache = {} #{name : (time, text)}
@staticmethod
def loadRaw(source):
latestTime = os.stat(source).st_mtime
if source in XLoad.rawCache.keys() and latestTime < XLoad.rawCache[source][0]:
# if the cached version of file is up to date, use it
return XLoad.rawCache[source][1]
else:
# otherwise read it from disk, dump it in cache and use that
text = open(source).read()
XLoad.rawCache[source] = (latestTime, text)
return text
、2ダースかそこらのコードので:プロセスが永続的であることを知って、私は私のクラスのいずれかで静的辞書にロードされたテキストを保存することにより、アドホックのmemcacheを作成しました私がファイルシステムから1つずつロードしていたスナップショットは、現在、プロセスのメモリから直接取得されていました。私は再起動を強制するたびに、キャッシュが満杯になったときに1回のリクエストで遅くなり、再び高速になります。
私の質問は、プロセスがどのように再起動し、クラスとモジュールがリロードされ、静的辞書に保存されたデータがパージされたかを正確に判断するものですか?それはPython、Django、Apache、またはFastCGIのインストールに依存していますか?それは時間、要求の数、負荷、または擬似ランダムに基づいて決定論的ですか?そして、この種のメモリ内キャッシュ(実際には非常に簡単で便利です)を行うのは安全ですか、あるいはこれらのファイル読み取りをキャッシュする適切な方法を調べるべきですか?