python - сайт - развертывание django на сервере



Веб-сервер Django зависает после запуска демона (1)

subprocess.call ждет возвращаемого значения, поэтому я довольно удивлен, что вы можете получить возвращаемое значение вообще. Попробуйте вместо этого использовать subprocess.Popen , поскольку это порождает процесс, а затем возвращает управление вам, а не ждет конца.

Я использую Django develpment server для запуска демона, он выполняет все команды из view.py, но висит веб-страница. Daemon запускается нормально, но проверка веб-страницы должна быть исправлена. Я работаю в Red Hat Enterprise Linux 6.3.

Чтобы убедиться, что это не ошибка моего или моего демона, я выполнил следующий тест:

1) Я создал новый проект Django «djtesting», где создал один файл 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 runningerver 192.168.1.226:8000» и открыл веб-страницу с « http://192.168.1.226:8000/hello/ » в браузере. Он показывает сообщение «Тестирование», а затем зависает (начинает загрузку и зависает на этом), хотя демон запускался нормально. Но если остановить демона с помощью «/etc/init.d/httpd stop», веб-страница перестанет загружаться. Кажется, что сервер ждет, пока демон закончит работу, но мне нужно просто запустить его, не дожидаясь его завершения.

Я пробовал другие способы запуска демона (по одной строке за одну попытку, конечно), но с таким же плохим результатом:

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', '&')

Я нашел аналогичный вопрос, но я не могу использовать start-stop-daemon, так как я работаю в RHEL6.3: Почему висит веб-страница после запуска демона на базовом сервере?





web