错误 324 空响应 - AttributeError: 'NoneType' 对象没有 'select' 属性
错误 324 空响应 - AttributeError: 'NoneType' 对象没有 'select' 属性
我正在使用Python 2.7.3和Django 1.5.8。我试图在新安装中获得“运行成功”。但是我在Chrome中得到错误324:
无法加载网页,因为服务器未发送任何数据。 错误代码:ERR_EMPTY_RESPONSE
当我关闭服务器时,我得到以下的追踪信息:
0个错误 2014年6月2日 - 06:39:55 Django版本1.5.8,使用设置'fed1.settings.dev' 开发服务器运行在http://127.0.0.1:8000/ 使用CONTROL-C退出服务器。 线程启动时发生未处理的异常:> 追踪信息如下所示: 文件“/home/vagrant/fed1-venv/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py”的第115行,函数inner_run中的最后一个调用: ipv6=self.use_ipv6, threading=threading) 文件“/home/vagrant/fed1-venv/local/lib/python2.7/site-packages/django/core/servers/basehttp.py”的第186行,函数run中的最后一个调用: httpd.serve_forever() 文件“/usr/lib/python2.7/SocketServer.py”的第225行,函数serve_forever中的最后一个调用: r, w, e = select.select([self], [], [], poll_interval) 属性错误:'NoneType'对象没有属性'select'
我在某个地方看到过这个错误与Python 2.5.1有关,但在2.5.2中已经消失。我现在找不到那个地方了。它可能在code.djangoproject.com的某个地方,但也许这不是同一个问题。
我看到如何在重新启动django runserver时“清除”端口,有人说服务器已经在运行,所以我尝试了那个解决方案:
(fed1-venv)vagrant@precise64:/vagrant/fed1$ ps aux | grep -i manage vagrant 10113 0.0 0.2 11676 940 pts/0 S+ 14:57 0:00 grep --color=auto -i manage
然后尝试将其提到前台进行关闭,但是:
(fed1-venv)vagrant@precise64:/vagrant/fed1$ fg bash: fg: current: no such job
所以这也不是我的问题。
Django - 使用静态文件时出现奇怪的行为有一个类似的错误,通过URL模式解决了这个错误 - 但我还没有解决。我只是想让它顺利运行。大多数遇到这个错误的人已经在生产环境中运行着网站。
我查看了socketserver.py
,但我不够高级来解释那个。
问题原因:当服务器关闭时,Python会清理全局名称以防止循环依赖导致的最终化延迟。它通过将它们重新绑定为None来实现。在按下CTRL-C触发最终化时,serve_forever线程仍在运行其套接字轮询循环,但是SocketServer模块中的select全局变量已经被重新绑定。因此,对select.select()的查找失败。
解决方法:如果这让您感到困扰,请升级到Python 3.4版本。根据Safe Object Finalization,这个版本不再将全局变量设置为None(在大多数情况下),请参阅PEP 442。
对于Chrome错误代码和其他问题,已经有一些东西绑定到您尝试用于Django的端口上。这是一个与您在select.select()调用中看到的异常完全不相关的问题。可能是另一个软件占用了该端口,而该软件不响应HTTP请求(导致Chrome错误响应)。
您可以参考以下链接来解决该问题:Determining what process is bound to a port(Linux)或Who is listening on a given TCP port on Mac OS X?(Mac)。
我按照您给出的链接查看了绑定到端口的进程,运行了netstat,但在8000或8888端口上没有任何结果。我决定尝试关闭虚拟机并重新启动。这次当我运行runserver时,Chrome仍然显示没有响应,但是当我关闭服务器时,控制台没有任何错误输出。我猜这是好事,因为这表明select错误已解决,但是对于“无响应”的问题,我不知道该怎么办。
附注:也许我应该补充/解释一下,8888端口是Vagrant转发到的端口。