Django的web服务器挂起后,开始了守护(Django web server hangs aft

2019-09-23 20:54发布

我使用Django农业开发服务器来启动一个守护进程,它从views.py执行所有的命令,但网页挂。 守护程序启动正常,但网页挂需要修复。 我在红帽企业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)然后,我开始的Web服务器“蟒蛇manage.py runserver命令192.168.1.226:8000”,打开网页,用“ http://192.168.1.226:8000/hello/的浏览器”。 它显示“测试”消息,然后挂起(开始加载挂在这个)虽然守护进程正常启动。 但是,如果停止与守护“/etc/init.d/httpd停止”网页停止加载。 看来,服务器等待,直到守护进程完成的工作,但我只需要启动它,而无需等待,直到它结束。

我试过其他的方式来运行一个后台程序(每门课程的一个尝试一条线),但同样差的结果:

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的: 为什么挂在网页开始后的第底层服务器上的后台?

Answer 1:

subprocess.call等待一个返回值,所以我很吃惊你能得到一个返回值的。 尝试使用subprocess.Popen代替,作为产卵的过程,然后返回控制权交还给你,而不是等待结束。



文章来源: Django web server hangs after it started a daemon