我有一些基于asyncore lib的超过3k传出套接字连接的python脚本。 由于连接限制(1024),我不能使用select(..),但poll(..)也不能正常工作:
asyncore.loop(use_poll=True)
通过此调用,我的应用程序会忽略任何套接字事件。请注意,少于1024个套接字上的select()工作正常。
我的问题在哪里?
答案 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)支持的基本功能确实有效 - 也就是说,它可以在简单的情况下提供读,写和关闭通知。你的案件与琐碎的案件有何不同?