非阻塞I/O,不停在调用CPU(这种方式称之为轮询)但是在做无用功,极大浪费
1 def select(self, timeout=None): 2 timeout = None if timeout is None else max(timeout, 0) 3 ready = [] 4 try: 5 r, w, _ = self._select(self._readers, self._writers, [], timeout) 6 except InterruptedError: 7 return ready 8 r = set(r) 9 w = set(w) 10 for fd in r | w: 11 events = 0 12 if fd in r: 13 events |= EVENT_READ 14 if fd in w: 15 events |= EVENT_WRITE 16 17 key = self._key_from_fd(fd) 18 if key: 19 ready.append((key, events & key.events)) 20 return ready 21 22 23 #返回的ready[(SelectorKey(fileobj=<django.core.servers.basehttp.WSGIServer object at 0x03489610>, fd=548, events=1, data=None), 1)]
原文:https://www.cnblogs.com/zengmu/p/12923244.html