我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用select.POLLOUT。
def _doReadOrWrite(self, selectable, fd, event, POLLIN, POLLOUT, log, faildict={ error.ConnectionDone: failure.Failure(error.ConnectionDone()), error.ConnectionLost: failure.Failure(error.ConnectionLost()) }): why = None inRead = False if event & POLL_DISCONNECTED and not (event & POLLIN): why = main.CONNECTION_LOST else: try: if event & POLLIN: why = selectable.doRead() inRead = True if not why and event & POLLOUT: why = selectable.doWrite() inRead = False if not selectable.fileno() == fd: why = error.ConnectionFdescWentAway('Filedescriptor went away') inRead = False except: log.deferr() why = sys.exc_info()[1] if why: self._disconnectSelectable(selectable, why, inRead)
def readwrite(obj, flags): try: if flags & select.POLLIN: obj.handle_read_event() if flags & select.POLLOUT: obj.handle_write_event() if flags & select.POLLPRI: obj.handle_expt_event() if flags & (select.POLLHUP | select.POLLERR | select.POLLNVAL): obj.handle_close() except socket.error, e: if e.args[0] not in _DISCONNECTED: obj.handle_error() else: obj.handle_close() except _reraised_exceptions: raise except: obj.handle_error()
def write(self, payload, timeout=None): size = len(payload) done = 0 limit = None if timeout != None: # first and last test of 'timeout' limit = time.time() + timeout while done < size: try: done += Connection.write(self, payload[done:]) except ConnectionAgain: if limit: timeout == limit - time.time() else: timeout = -1 events = self.poll(select.POLLOUT, timeout) if not events: raise ConnectionTimeout('write attempt timed out') if events[0][1] & (select.POLLHUP | select.POLLERR): raise ConnectionClosed( 'write attempt failed with %d at %d %f' % (events[0][1], done, timeout) ) if events[0][1] & select.POLLOUT: continue raise Exception('unknown events: %s' % events)
def _updateRegistration(self, fd): """Register/unregister an fd with the poller.""" try: poller.unregister(fd) except KeyError: pass mask = 0 if fd in reads: mask = mask | select.POLLIN if fd in writes: mask = mask | select.POLLOUT if mask != 0: poller.register(fd, mask) else: if fd in selectables: del selectables[fd] poller.eApp.interruptPoll()
def select(self, timeout=None): if timeout is None: timeout = None elif timeout <= 0: timeout = 0 else: # poll() has a resolution of 1 millisecond, round away from # zero to wait *at least* timeout seconds. timeout = math.ceil(timeout * 1e3) ready = [] try: fd_event_list = self._poll.poll(timeout) except InterruptedError: return ready for fd, event in fd_event_list: events = 0 if event & ~select.POLLIN: events |= EVENT_WRITE if event & ~select.POLLOUT: events |= EVENT_READ key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready
def select(self, timeout=None): if timeout is None: timeout = None elif timeout <= 0: timeout = 0 else: # devpoll() has a resolution of 1 millisecond, round away from # zero to wait *at least* timeout seconds. timeout = math.ceil(timeout * 1e3) ready = [] try: fd_event_list = self._devpoll.poll(timeout) except InterruptedError: return ready for fd, event in fd_event_list: events = 0 if event & ~select.POLLIN: events |= EVENT_WRITE if event & ~select.POLLOUT: events |= EVENT_READ key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready
def select(self, timeout=None): if timeout is None: timeout = None elif timeout <= 0: timeout = 0 else: # poll() has a resolution of 1 millisecond, round away from # zero to wait *at least* timeout seconds. timeout = int(math.ceil(timeout * 1e3)) ready = [] try: fd_event_list = wrap_error(self._poll.poll, timeout) except InterruptedError: return ready for fd, event in fd_event_list: events = 0 if event & ~select.POLLIN: events |= EVENT_WRITE if event & ~select.POLLOUT: events |= EVENT_READ key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready
def register(self, fd, eventmask=_NONE): if eventmask is _NONE: flags = _EV_READ | _EV_WRITE else: flags = 0 if eventmask & POLLIN: flags = _EV_READ if eventmask & POLLOUT: flags |= _EV_WRITE # If they ask for POLLPRI, we can't support # that. Should we raise an error? fileno = get_fileno(fd) watcher = self.loop.io(fileno, flags) watcher.priority = self.loop.MAXPRI self.fds[fileno] = watcher
def _updateRegistration(self, fd): """Register/unregister an fd with the poller.""" try: poller.unregister(fd) except KeyError: pass mask = 0 if reads.has_key(fd): mask = mask | select.POLLIN if writes.has_key(fd): mask = mask | select.POLLOUT if mask != 0: poller.register(fd, mask) else: if selectables.has_key(fd): del selectables[fd] poller.eApp.interruptPoll()
def readwrite(obj, flags): try: if flags & select.POLLIN: obj.handle_read_event() if flags & select.POLLOUT: obj.handle_write_event() if flags & select.POLLPRI: obj.handle_expt_event() if flags & (select.POLLHUP | select.POLLERR | select.POLLNVAL): obj.handle_close() except socket.error as e: if e.args[0] not in _DISCONNECTED: obj.handle_error() else: obj.handle_close() except _reraised_exceptions: raise except: obj.handle_error()
def __init__(self, server_address): self.server_address = server_address # ?????IP??? self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ??TCP??socket self.__setblock = False # ?????????? self.message_queue = {} # ?????? self.rlist = (select.POLLIN or select.POLLHUP or select.POLLPRI or select.POLLERR) # ???? self.wlist = (self.rlist or select.POLLOUT) # ???? self.fd_socket = {} # ??????????socket???? self.poll = select.poll() # ???????? self.logger = logging.getLogger(__name__) # ?????? if self.output_console: self.console_handler = logging.StreamHandler() # ??????????? if self.logfile: # ???????,???????? self.file_handler = logging.FileHandler(filename=self.logfile, encoding=self.encoding) # ???????? self.set_log() # ???? self.bind() # ????IP???
def __init__(self, server_address): """?????,socket??? :param server_address: :return: """ self.server_address = server_address # ?????IP??? self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ??TCP??socket self.__setblock = False # ?????????? self.message_queue = {} # ?????? self.rlist = (select.POLLIN or select.POLLHUP or select.POLLPRI or select.POLLERR) # ???? self.wlist = (self.rlist or select.POLLOUT) # ???? self.fd_socket = {} # ??????????socket???? self.poll = select.poll() # ???????? self.logger = logging.getLogger(__name__) # ?????? if self.output_console: self.console_handler = logging.StreamHandler() # ??????????? if self.logfile: # ???????,???????? self.file_handler = logging.FileHandler(filename=self.logfile, encoding=self.encoding) # ???????? self.set_log() # ???? self.bind() # ????IP???
def __init__(self, server_address): self.server_address = server_address # ?????IP??? self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ??TCP??socket self.message_queue = {} # ?????? self.rlist = (select.POLLIN or select.POLLHUP or select.POLLPRI or select.POLLERR) # ???? self.wlist = (self.rlist or select.POLLOUT) # ???? self.fd_socket = {} # ??????????socket???? self.poll = select.poll() # ???????? self.logger = logging.getLogger(__name__) # ?????? if self.output_console: self.console_handler = logging.StreamHandler() # ??????????? if self.logfile: # ???????,???????? self.file_handler = logging.FileHandler(filename=self.logfile, encoding=self.encoding) # ???????? self.set_log() # ???? self.connect_server() self.is_send = None # ????????,????None,???????????
def __init__(self, server_address): self.server_address = server_address # ?????IP??? self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ??TCP??socket self.message_queue = {} # ?????? self.rlist = (select.POLLIN or select.POLLHUP or select.POLLPRI or select.POLLERR) # ???? self.wlist = (self.rlist or select.POLLOUT) # ???? self.fd_socket = {} # ??????????socket???? self.poll = select.poll() # ???????? self.logger = logging.getLogger(__name__) # ?????? if self.output_console: self.console_handler = logging.StreamHandler() # ??????????? if self.logfile: # ???????,???????? self.file_handler = logging.FileHandler(filename=self.logfile, encoding=self.encoding) # ???????? self.set_log() # ???? self.connect_server() self.is_send = None # ????????,????None,??????????? self.local_file = None self.remote_file = None
def events_from_poll(events): ret = 0 if events & select.POLLIN: ret |= libvirt.VIR_EVENT_HANDLE_READABLE if events & select.POLLOUT: ret |= libvirt.VIR_EVENT_HANDLE_WRITABLE if events & select.POLLNVAL: ret |= libvirt.VIR_EVENT_HANDLE_ERROR if events & select.POLLERR: ret |= libvirt.VIR_EVENT_HANDLE_ERROR if events & select.POLLHUP: ret |= libvirt.VIR_EVENT_HANDLE_HANGUP return ret ########################################################################### # Now glue an instance of the general event loop into libvirt's event loop ########################################################################### # This single global instance of the event loop wil be used for # monitoring libvirt events
def poll(self, timeout=None): """Performs a poll and dispatches the resulting events.""" if not self.readmap and not self.writemap: return try: event_list = self._poller.poll(timeout) except select.error: _, e, _ = sys.exc_info() errno = e.args[0] if errno == EINTR: return else: raise for fd, event in event_list: if event & (select.POLLIN | select.POLLHUP): handler = self.readmap[fd] handler(fd, self) if event & (select.POLLOUT | select.POLLERR): handler = self.writemap[fd] handler(fd, self)
def one_poll_loop(self): if self.futures: for (fd, ev) in self.poll.poll(1): future = self.futures[fd] if ev & select.POLLOUT: if not future.writable(): self.poll.modify(fd, select.POLLIN) if ev & select.POLLIN: if not future.readable(): self.unregister(fd) if ev & (select.POLLERR | select.POLLHUP): self.unregister(fd) for fd, future in self.futures.items(): if future.ready(): self.unregister(fd)
def poll(self, timeout): if timeout is not None: # convert from seconds to milliseconds timeout *= 1000 changes = self._poll.poll(timeout) results = [] for fd, events in changes: f = self._get_file_object(fd) if events & (select.POLLIN | select.POLLPRI): results.append((f, POLLER_EVENT_READ)) elif events & (select.POLLOUT): results.append((f, POLLER_EVENT_WRITE)) elif events & (select.POLLHUP): results.append((f, POLLER_EVENT_HUP)) elif events & (select.POLLERR | select.POLLNVAL): results.append((f, POLLER_EVENT_ERROR)) return results
def rwsplit(sts, ret, tmbs): diffs = {} for idx in sts: st = sts[idx] if st.sock is not None: val = select.POLLIN if st.ssl_write or st.want_write: val = val | select.POLLOUT if ret.get(idx) != val: ret[idx] = val diffs[idx] = True else: ret[idx] = 0 diffs[idx] = False if st.want_handle: plist = tmbs.setdefault(st.partner, []) while st.want_handle: tombstone = (st.dequeue(), time.time()) plist.append(tombstone) return diffs
def _doReadOrWrite(self, selectable, fd, event, POLLIN, POLLOUT, log, faildict=None): if not faildict: faildict = { error.ConnectionDone: failure.Failure(error.ConnectionDone()), error.ConnectionLost: failure.Failure(error.ConnectionLost()) } why = None inRead = False if event & POLL_DISCONNECTED and not (event & POLLIN): why = main.CONNECTION_LOST else: try: if event & POLLIN: why = selectable.doRead() inRead = True if not why and event & POLLOUT: why = selectable.doWrite() inRead = False if not selectable.fileno() == fd: why = error.ConnectionFdescWentAway('Filedescriptor went away') inRead = False except: log.deferr() why = sys.exc_info()[1] if why: self._disconnectSelectable(selectable, why, inRead)
def readwrite(obj, flags): try: if flags & select.POLLIN: obj.handle_read_event() if flags & select.POLLOUT: obj.handle_write_event() if flags & select.POLLPRI: obj.handle_expt_event() if flags & (select.POLLHUP | select.POLLERR | select.POLLNVAL): obj.handle_close() except OSError as e: if e.args[0] not in _DISCONNECTED: obj.handle_error() else: obj.handle_close() except _reraised_exceptions: raise except: obj.handle_error()
def register(self, fileobj, events, data=None): key = super(PollSelector, self).register(fileobj, events, data) event_mask = 0 if events & EVENT_READ: event_mask |= select.POLLIN if events & EVENT_WRITE: event_mask |= select.POLLOUT self._poll.register(key.fd, event_mask) return key
def select(self, timeout=None): ready = [] fd_events = _syscall_wrapper(self._wrap_poll, True, timeout=timeout) for fd, event_mask in fd_events: events = 0 if event_mask & ~select.POLLIN: events |= EVENT_WRITE if event_mask & ~select.POLLOUT: events |= EVENT_READ key = self._key_from_fd(fd) if key: ready.append((key, events & key.events)) return ready
def poll2(timeout=0.0, map=None): # Use the poll() support added to the select module in Python 2.0 if map is None: map = socket_map if timeout is not None: # timeout is in milliseconds timeout = int(timeout*1000) pollster = select.poll() if map: for fd, obj in map.items(): flags = 0 if obj.readable(): flags |= select.POLLIN | select.POLLPRI if obj.writable(): flags |= select.POLLOUT if flags: # Only check for exceptions if object was either readable # or writable. flags |= select.POLLERR | select.POLLHUP | select.POLLNVAL pollster.register(fd, flags) try: r = pollster.poll(timeout) except select.error, err: if err.args[0] != EINTR: raise r = [] for fd, flags in r: obj = map.get(fd) if obj is None: continue readwrite(obj, flags)
def __init__(self, pipe, name, recvfailok): self.pipe = pipe self.pollin = select.poll() self.pollin.register(self.pipe, select.POLLIN) self.pollout = select.poll() self.pollout.register(self.pipe, select.POLLOUT) self.name = name self.sendfailcount = 0 self.failcountmsg = 1 self.recvfailok = recvfailok