Django 1.4.18开发服务器在VirtualBox下响应缓慢

2024-06-16 11:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我们在一个virtualbox UbuntuLTS12.04客户机上运行我们的开发环境。我们使用/管理.py在开发期间运行服务器。在

最近,我们将Django版本升级到最新版本(1.4.19),但注意到一个非常奇怪的行为:来自主机的请求需要5-30秒的时间来处理,而来自虚拟机内部的请求则在不到一秒钟的时间内得到满足,这是应该的。这个问题已经在django1.4.18(https://docs.djangoproject.com/fr/1.7/releases/1.4.18/)中引入,所有旧版本都工作得很快。在

在来宾或主机中使用不同的浏览器没有任何区别。请求的资源是动态的还是静态的也没有任何区别(我们在开发过程中使用静态应用程序来提供静态内容)。在

什么会导致这种行为?从发行说明中我们还不清楚。在


Tags: djangopyhttps版本服务器comdocs客户机
1条回答
网友
1楼 · 发布于 2024-06-16 11:31:28

我真不敢相信我终于解决了这个问题。我有同样的问题,你提到它只出现在django1.4.17之后的版本中,这让我走上了正确的轨道。在

简短解决方案:将网关IP添加到来宾计算机中的/etc/hosts,例如:

10.0.2.2 10.0.2.2

详细说明:Django 1.4.18引入了对包含下划线的头的剥离。这是无害的,但是django.core.servers.basehttp.WSGIRequestHandler.get_environ方法略有改变。从1.4.18开始,它依赖于wsgiref.simple_server.WSGIRequestHandler.get_environ,其中包含以下行:

^{pr2}$

address_string是来自BaseHTTPServer的方法:

 def address_string(self):
    """Return the client address formatted for logging.

    This version looks up the full hostname using gethostbyaddr(),
    and tries to find a name that contains at least one dot.

    """

    host, port = self.client_address[:2]
    return socket.getfqdn(host)

对getfqdn的调用是(慢)罪魁祸首:

In [1]: import socket
In [2]: %time socket.getfqdn("10.0.2.2")
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 1.56 s
Out[2]: '10.0.2.2'

在我将“10.0.2.2 10.0.2.2”行添加到来宾计算机中的/etc/hosts之后,主机名解析几乎是即时的:

In [3]: %time socket.getfqdn("10.0.2.2")
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 834 µs
Out[3]: '10.0.2.2'

请注意,您的网关地址可以通过在来宾环境中运行route -n来找到。在

相关问题 更多 >