2011-09-07 38 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沒有任何限制。 –