2

Django 開発サーバーを使用してデーモンを起動すると、views.py からすべてのコマンドが実行されますが、Web ページがハングします。デーモンは正​​常に起動していますが、Web ページのハングを修正する必要があります。Red Hat Enterprise Linux 6.3 で作業しています。

それが私または私のデーモンの間違いではないことを確認するために、次のテストを実行しました。

1) 新しい Django プロジェクト「djtesting」を作成し、次のコードで 1 つの views.py ファイルを作成しました (httpd デーモンを開始します)。

from django.http import HttpResponse
import subprocess

def hello(request):
    res = subprocess.call("/usr/sbin/httpd")
    return HttpResponse("Testing.")

2) この関数を urls.py に追加しました:

from django.conf.urls.defaults import patterns, include, url
from djtesting.views import hello

urlpatterns = patterns('',
    ('^hello/$', hello),
    )

3) 次に、「python manage.py runserver 192.168.1.226:8000」で Web サーバーを起動し、ブラウザーで「http://192.168.1.226:8000/hello/」の Web ページを開きます。デーモンは正​​常に起動しましたが、「テスト中」というメッセージが表示されてからハングします (ロードを開始し、これでハングします)。しかし、「/etc/init.d/httpd stop」でデーモンを停止すると、Web ページのロードが停止します。サーバーはデーモンの動作が完了するまで待機しているようですが、終了を待たずに起動するだけで済みます。

デーモンを実行する別の方法を試しましたが(もちろん、1回の試行で1行)、同じ悪い結果になりました:

thread.start_new_thread(os.system, ('/usr/sbin/httpd',))
process = subprocess.Popen("/usr/sbin/httpd", stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
res = subprocess.call(["/usr/sbin/httpd", "&"])
res = subprocess.Popen("/usr/sbin/httpd")
res = os.system("/usr/sbin/httpd &")
res = os.spawnl(os.P_NOWAITO, '/usr/sbin/httpd', '&')

同様の質問を見つけましたが、RHEL6.3 で作業しているため、start-stop-daemon を使用できません: 基盤となるサーバーでデーモンを開始した後に Web ページがハングするのはなぜですか?

4

1 に答える 1

0

subprocess.call戻り値を待つので、戻り値をまったく取得できることにかなり驚いています。代わりに使用してみてくださいsubprocess.Popen。プロセスが生成され、終了を待つのではなく、制御が返されます。

于 2012-10-15T22:34:15.613 に答える