📄 selectpoll.py
字号:
# The contents of this file are subject to the BitTorrent Open Source License# Version 1.0 (the License). You may not copy or use this file, in either# source code or executable form, except in compliance with the License. You# may obtain a copy of the License at http://www.bittorrent.com/license/.## Software distributed under the License is distributed on an AS IS basis,# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License# for the specific language governing rights and limitations under the# License.# Written by Bram Cohenfrom select import select, errorfrom time import sleepfrom types import IntTypefrom bisect import bisectPOLLIN = 1POLLOUT = 2POLLERR = 8POLLHUP = 16class poll(object): def __init__(self): self.rlist = [] self.wlist = [] def register(self, f, t): if type(f) != IntType: f = f.fileno() if (t & POLLIN) != 0: insert(self.rlist, f) else: remove(self.rlist, f) if (t & POLLOUT) != 0: insert(self.wlist, f) else: remove(self.wlist, f) def unregister(self, f): if type(f) != IntType: f = f.fileno() remove(self.rlist, f) remove(self.wlist, f) def poll(self, timeout = None): if self.rlist != [] or self.wlist != []: r, w, e = select(self.rlist, self.wlist, [], timeout) else: sleep(timeout) return [] result = [] for s in r: result.append((s, POLLIN)) for s in w: result.append((s, POLLOUT)) return resultdef remove(list, item): i = bisect(list, item) if i > 0 and list[i-1] == item: del list[i-1]def insert(list, item): i = bisect(list, item) if i == 0 or list[i-1] != item: list.insert(i, item)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -