django在我的机器上很慢

时间:2008-12-12 13:53:05

标签: python django dns

我有一个全新安装的django 1.0,一个简单的页面需要5秒才能加载。在我同事的电脑上几乎没时间。

我使用

启动服务器
python manage.py testserver

我可以看到每个GET请求(PNG和样式表)大约需要半秒钟。

另一个奇怪的事情,我认为是相关的,应用程序的功能测试在我的机器上使用MySQL运行得慢得多(比我同事的机器慢100倍)。当我将应用程序设置为使用sqlite时,它们运行得非常快。我想感叹sqlite并没有太多改变加载页面所需的时间,但它确实加速了服务器的启动。

看起来像IO问题,但除了django之外,我在机器上看不到一般的性能问题。

Django在python2.4上运行,我正在运行Vista。我还检查了python2.5。

谢谢ΤΖΩΤΖΙΟΥ,它必须完全是一个DNS问题,因为页面一旦加载就会很快加载 而不是http://localhost:8000/app我转到http://127.0.0.1:8000/app

但它可能是由什么引起的?我的主机文件只有两个条目:

127.0.0.1   localhost
::1         localhost

14 个答案:

答案 0 :(得分:18)

Firefox在某些Windows计算机上浏览到localhost时出现问题。您可以通过关闭ipv6来解决它,这不是真正推荐的。直接使用127.0.0.1是解决问题的另一种方法。

答案 1 :(得分:7)

这些帖子都没有帮助我。在我的具体案例中,Justin Carmony给了我答案。

<强>问题

我将[hostname] .local映射到我的/ etc / hosts文件中的127.0.0.1,以便于开发,dns请求需要5秒才能解决。有时他们会快速解决,有时他们不会。

<强>解决方案

Apple正在使用.local在更新的Snow Leopard版本(我认为我在更新到10.6.8之后开始注意到它)和Mac OS X Lion上做了一些极好的魔术。如果您将dev主机名更改为以local开头而不是以local结尾,则应该全部设置。此外,除了本地之外,您几乎可以使用任何TLD,它可以正常工作。

示例

test.local可以成为:

  • local.test.com
  • test.dev
  • 测试。[除了当地的任何东西]

并且您的主机文件条目将显示为:

local.test.com  127.0.0.1

注意:此解决方案具有作为[hostname] .com子域的附加好处,可以更轻松地为Facebook API等指定应用程序域名。

更新/ etc / hosts后,可能还希望在终端中运行dscacheutil -flushcache以获得良好的衡量标准

答案 2 :(得分:3)

由于您报告您的朋友的机器没有延迟,并且我认为您的和他的是可比较的计算机,它可能是DNS相关的问题。尝试将客户端和服务器的IP地址添加到服务器的hosts文件中。

如果你在* nix上运行Django,它就是/etc/hosts文件。如果在MS Windows上运行它,那就是%WINDIR%\SYSTEM32\DRIVERS\ETC\HOSTS文件。 (它们是文本文件,可以通过您喜欢的文本编辑器进行编辑。)

答案 3 :(得分:2)

我认为它是开发服务器,它没有针对速度和安全性进行优化。我注意到特殊服务的静态文件(即媒体)很慢。

答案 4 :(得分:2)

我过去遇到过同样的问题。可以通过从hosts文件中删除以下行来解决此问题。

::1         localhost

一旦它消失了,你应该能够快速再次使用localhost。

答案 5 :(得分:2)

也有同样的问题,我在Vista和Windows 7机器上用Firefox注意到了它。访问开发服务器127.0.0.1:8000解决了这个问题。

答案 6 :(得分:1)

如果所有其他方法都失败了,您可以随时cProfile申请并查看确切的瓶颈所在。

答案 7 :(得分:1)

我有同样的问题,但它是由mysqld引起的。

该应用程序使用wsgi和mysql服务器在同一主机上的生产速度非常快,但在使用django runserver选项和远程mysql服务器的开发环境中速度很慢。

我注意到使用“show processlist”表示数据库中的连接与用户“未经身份验证的用户”处于“登录”状态,这让我注意到身份验证过程中的问题。

寻找真正的问题,我终于注意到mysqld试图获取我的ip的dns名称并禁用名称dns解析,我解决了问题。

为此,您可以将此行添加到my.cnf文件中:

  

跳过名称解析

答案 8 :(得分:1)

升级到Django 1.3或更新版本。

如果您在2012年仍然遇到此问题(使用Chrome),请确保您正在升级。在1.3中,当开发服务器是单线程时,bug被修复与慢速相关。

升级解决了我的问题。我正在运行Django 1.2,因为这是Debian Squeeze的默认设置。

答案 9 :(得分:1)

我这样解决了这个问题:

转到setting.py并设置

DEBUG = False

答案 10 :(得分:0)

禁用AV扫描&amp;看看是否有所作为。它也可能是由Vista造成的。升级到最新的Service Pack,然后重试。

答案 11 :(得分:0)

要完全绕过localhost而不更改主机文件或Firefox中的任何设置,您可以安装插件Redirector并制定规则以从localhost重定向到127.0.0.1。使用这些设置

Include pattern : http://localhost*
Redirect to     : http://127.0.0.1$1

将其他字段留空。

答案 12 :(得分:0)

我遇到了同样的问题。

解决方案是:

  • 我试图启动localy一个通常部署在生产中的网络服务器上的版本。
  • 生产中的静态文件由apache配置提供,而不是由django static serve提供

所以我刚刚取消注释我的静态服务网址:/

答案 13 :(得分:0)

静态文件加载缓慢

如果您注意到静态文件和媒体文件(图像,样式表等)的加载特别慢,则问题可能出在Django的开发服务器(python manage.py runserver)上。如hassen所述,该服务器未针对速度进行优化。

您可以尝试使用带有runserver_plus选项的django-extensions --threaded命令来代替Django的默认runserver命令。在后台,它使用Werkzeug作为线程化的WSGI服务器。您可能会注意到,静态文件的加载时间有了很大的改善。