1

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

asyncore.loop(use_poll=True)

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

我的问题在哪里?

4

1 回答 1

0

首先,小幅修正。 use_poll=True不会导致asyncore使用epoll(2)。它导致它使用poll(2)(此外, asyncore 的工作方式,几乎没有理由尝试使用epoll(2),因为 asyncore 的 Python 级开销超过了正在使用的套接字事件通知 API 的任何成本) .

其次,它的一个主要缺点asyncore是它使您暴露于特定于平台的怪癖的程度。对于为您处理select(2)poll(2)之间更多差异的库,并且它实际上支持epoll(2)并且在许多其他方面也更好,请查看Twisted

如果您可以为您的问题添加更多详细信息,也许可以发现您在 asyncore 上遇到的具体问题,但根据现在可用的信息,无法确定。asyncore 的poll(2)支持的基本功能确实有效 - 即,它可以在普通情况下传递读取、写入和关闭通知。您的案例与普通案例有何不同?

于 2011-12-06T14:31:49.533 回答