2016-06-29 7 views
-1

私は現在、データベースにサイトにアクセスした人のIPアドレスを格納するdjangoを使用してWebサイトを開発しています。アイデアは、毎晩午前0時にウェブサイトがデータベースのすべてのアイテムについてtracerouteを完了し、pygameを使用して各ホップの地理的な場所を地図上にマップします。この地図は画像として保存され、ウェブサイトに表示されます。django __init__.pyファイルpygameコードを実行していません

現在、すべてが個別に動作する必要があります。

マイのinitの.pyファイルは現在、次のようになります。

import subprocess, sys 
print "Starting scripts..." 
P = subprocess.Popen([sys.executable, "backgroundProcess.py"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
print "...Scripts started" 

コマンドプロンプトからこれを実行している、あるいはGUIから、それが正常に動作し、時間あればマップが正しく描画されますは正しい。しかし、Webサイトの起動時にスクリプトを実行すると、テキストが正しく印刷されます(スクリプトの開始...と...スクリプトが開始されました)が、マップは描画されません。要するに、私の質問は:djangoは .pyファイルで何ができるのか制限していますか?

+0

Djangoはあなたが '__init __。py'ファイルに何ができるか上の任意の特定の制限を入れていません...ここでそのサブプロセスのものを必要としないが、それは次のようにスクリプトコードを持つようにPythonで非常に悪い習慣ですこれはパッケージの '__init __。py'にあります。また、私はちょうど(あなたの問題の説明から)これがDjangoまたはPygameに関係するものは何も見ません。 –

+0

これをどうやってお勧めしますか? _init__.pyを使用して新しいマップをレンダリングするのが適切かどうかを常にチェックするスクリプトを起動するのではなく、簡単な方法がありますか? –

答えて

0

モジュールの最上位レベルのコード(パッケージの__init__.pyまたは通常のモジュールであるかどうかにかかわらず)は、このモジュールの最初のインポート時にプロセスごとに1回だけ実行されます。 Djangoは長時間実行されるプロセスを使用して提供されるため、このコードは新しいプロセスが開始されたときにのみ実行されます。

スケジュールされたバックグラウンドタスクの最も簡単な解決策は、Django management commandを作成し、cronジョブ(またはシステム上の利用可能なスケジューラ)から呼び出すことです。あなたは本当に

関連する問題