Python asyncore:“filedescriptor超出了select()”的范围

时间:2011-11-03 14:55:24

标签: python linux sockets asynchronous asyncore

我有一些基于asyncore lib的超过3k传出套接字连接的python脚本。 由于连接限制(1024),我不能使用select(..),但poll(..)也不能正常工作:

asyncore.loop(use_poll=True)

通过此调用,我的应用程序会忽略任何套接字事件。请注意,少于1024个套接字上的select()工作正常。

我的问题在哪里?

1 个答案:

答案 0 :(得分:0)

首先,进行一次小修正。 use_poll=True不会导致asyncore使用 epoll(2)。它导致它使用 poll(2)(此外,asyncore的工作方式,没有理由尝试使用 epoll(2),因为Python级开销asyncore淹没了正在使用的套接字事件通知API的任何代价。

其次,asyncore的一个主要缺点是它使您暴露于平台特定怪癖的程度。对于为您处理 select(2) poll(2)之间的更多差异的库,以及实际支持 epoll(2),以及better in a number of other ways too,请查看Twisted

如果您可以add more details提出问题,也许可以发现您在asyncore上遇到的具体问题,但根据现有的信息,我们无法确定。 asyncore的 poll(2)支持的基本功能确实有效 - 也就是说,它可以在简单的情况下提供读,写和关闭通知。你的案件与琐碎的案件有何不同?