2011-09-07 39 views
1

在supervisord一个问题的解决方法是: “编译支持> 1024文件描述符一个Python”如何用> 1024个文件描述符编译python?

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

可有人请走我通过什么变化是必要做到这一点?我已经提取了python 2.7.2源代码并准备好了。

运行centos 5.6,如果有问题。

谢谢。

更新:的ulimit -n已被设置为65535这是完全错误开始supervisord当我越来越:

Traceback (most recent call last): File "/usr/local/bin/supervisord", line 8, in load_entry_point('supervisor==3.0a10', 'console_scripts', 'supervisord')() File "/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py", line 372, in main go(options) File "/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py", line 382, in go d.main()
File "/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py", line 95, in main self.run()
File "/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py", line 112, in run self.runforever()
File "/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/supervisord.py", line 230, in runforever r, w, x = self.options.select(r, w, x, timeout)
File "/usr/local/lib/python2.7/site-packages/supervisor-3.0a10-py2.7.egg/supervisor/options.py", line 1113, in select return select.select(r, w, x, timeout) ValueError: filedescriptor out of range in select()

+1

你用什么方式耗尽描述符?例如,如果您只是简单地打开文件,那么与使用select()时用完的文件大不相同。 –

+0

我的ulimit -n已经是:65535 –

+0

(oops命中太早输入)...更新了完整错误的问题 –

回答

2

这实际上是底层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。

+0

如果您查看CPython源,则可以验证此内容。它最终调用标准C'fopen()'函数来打开文件。据我所知,python没有任何限制。 –