如何使用> 1024文件描述符编译python?

时间:2011-09-07 02:08:46

标签: python centos centos5

监督问题的解决方法是: “编译支持> 1024文件描述符的Python”

https://github.com/Supervisor/supervisor/issues/26

有人可以告诉我完成此操作所需的更改吗?我已经提取了python 2.7.2源代码并准备好了。

运行centos 5.6,如果重要的话。

感谢。

更新:ulimit -n已设置为65535.这是我在启动supervisord时遇到的完整错误:

  

追踪(最近一次通话):   文件“/ usr / local / bin / supervisord”,第8行,in       load_entry_point('supervisor == 3.0a10','console_scripts','supervisord')()   文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第372行,主要       去(选项)   文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第382行,在go d.main()中   文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第95行,主要       self.run()
  文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第112行,在运行中       self.runforever()
  在runforever中输入文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py”,第230行       r,w,x = self.options.select(r,w,x,timeout)
  文件“/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/options.py”,第1113行,在select中       return select.select(r,w,x,timeout)   ValueError:filedescriptor超出select()

的范围

1 个答案:

答案 0 :(得分:3)

这实际上是基础select(2)系统调用的限制。

从手册页:

An fd_set is a fixed size buffer.  Executing FD_CLR() or FD_SET() with a value of fd 
that  is  negative  or  is equal  to  or  larger  than  FD_SETSIZE will result in 
undefined behavior. 

标准FD_SETSIZE为1024。

/usr/include/linux/posix_types.h:#define __FD_SETSIZE   1024

所以这不是Python问题。 poll(2)epoll(2)系统调用具有更大的限制。你真正需要做的是使用select.epoll对象(仍然在select模块中)而不是`select。