Python:Lib使用epoll(如果可用),后退来选择

gue*_*tli 8 python select epoll python-asyncio

我想在我的Python库中使用select.epoll().

不幸的是epoll并不是随处可见的.

我需要一种方法来回退到select.select().

我试图在pypi找到一些东西,但未能找到匹配的包:https://pypi.python.org/pypi?%3Aaction = search&term = epoll&subsmit = search

我怎么能解决这个"从epoll回退选择是否epoll不可用"?

And*_*ini 9

Python 3.4引入了选择器模块.它提供了DefaultSelector"当前平台上最有效的实现"的别名.

这是一个快速使用示例:

sel = selectors.DefaultSelector()

sel.register(fp1, selectors.EVENT_READ)
sel.register(fp2, selectors.EVENT_READ)
sel.register(fp3, selectors.EVENT_READ)

for key, mask in sel.select():
    print(key.fileobj)
Run Code Online (Sandbox Code Playgroud)

您可以在Python文档中找到更完整的示例.

DefaultSelector 将按此顺序尝试:

  • epool(Linux),kqueue(FreeBSD/NetBSD/OpenBSD/OS X)或/dev/poll(Solaris)
  • poll (UNIX)
  • select


geo*_*xsh 4

除了selectorsstdlib 之外,我还会使用uvloop,它是在 Cython 之上构建的libuv。与libevent/相比libev,这两个没有主动维护 python 绑定, uvloop 更有前途。