我在进行网络编程的时候需要使用到 select 模型,同时如果平台是 Linux 就使用 epoll 模型,所以我需要对 Linux 平台的代码做特殊处理,目前我的代码是这样的:
if is_linux():
self.__fds = {}
self.__epoll = select.epoll()
if is_linux():
conn = self._connection_pool[host]
self.__epoll.register(conn.fileno(), select.EPOLLIN)
self.__fds[conn.fileno()] = conn
if is_linux():
while 1:
events = self.__epoll.poll(1)
else:
while 1:
readable, writeable, exceptional = select.select(conns, [], [])
if conn.close(): # 连接已关闭
if is_linux():
self.__epoll.unregister(conn.fileno())
我是对所有需要用到 epoll 的地方添加了环境判断,如果是 linux 环境就做特殊的处理。 以上代码是可以正常使用的,但是感觉不够优雅,不知道各位有没有什么比较优雅的解决方案🤔
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.