Python selectors.EVENT_READ Examples
The following are 30
code examples of selectors.EVENT_READ().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
selectors
, or try the search function
.
Example #1
Source File: server.py From mock-ssh-server with MIT License | 8 votes |
def _run(self): sock = self._socket selector = selectors.DefaultSelector() selector.register(sock, selectors.EVENT_READ) while sock.fileno() > 0: self.log.debug("Waiting for incoming connections ...") events = selector.select(timeout=1.0) if events: try: conn, addr = sock.accept() except OSError as ex: if ex.errno in (errno.EBADF, errno.EINVAL): break raise self.log.debug("... got connection %s from %s", conn, addr) handler = Handler(self, (conn, addr)) t = threading.Thread(target=handler.run) t.setDaemon(True) t.start()
Example #2
Source File: tcp_client.py From LiMEaide with GNU General Public License v3.0 | 7 votes |
def run(self): retry = True self.logger.info("Connecting to Socket") sel = selectors.DefaultSelector() conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) conn.setsockopt( socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0)) conn.setblocking(False) conn.connect_ex((self.ip, self.port)) sel.register(conn, selectors.EVENT_READ, data=None) while retry: events = sel.select() for key, mask in events: retry = self.__handle_client__(key, mask, sel) sel.unregister(conn) if self.result['success']: conn.shutdown(socket.SHUT_RDWR) self.qresult.put(self.result) self.logger.info("Socket Closed")
Example #3
Source File: _unix.py From asyncqt with BSD 2-Clause "Simplified" License | 7 votes |
def _process_event(self, key, mask): """Selector has delivered us an event.""" self._logger.debug('Processing event with key {} and mask {}'.format(key, mask)) fileobj, (reader, writer) = key.fileobj, key.data if mask & selectors.EVENT_READ and reader is not None: if reader._cancelled: self.remove_reader(fileobj) else: self._logger.debug('Invoking reader callback: {}'.format(reader)) reader._run() if mask & selectors.EVENT_WRITE and writer is not None: if writer._cancelled: self.remove_writer(fileobj) else: self._logger.debug('Invoking writer callback: {}'.format(writer)) writer._run()
Example #4
Source File: tcp_client_selectors.py From Learning-Python-Networking-Second-Edition with MIT License | 6 votes |
def service_connection(key, mask): sock = key.fileobj data = key.data if mask & selectors.EVENT_READ: recv_data = sock.recv(BUFFER_SIZE) if recv_data: print('Received {} from connection {}'.format(repr(recv_data), data.connid)) data.recv_total += len(recv_data) if not recv_data or data.recv_total == data.msg_total: print('Closing connection', data.connid) selector.unregister(sock) sock.close() if mask & selectors.EVENT_WRITE: if not data.outb and data.messages: data.outb = data.messages.pop(0).encode() if data.outb: print('Sending {} to connection {}'.format(repr(data.outb), data.connid)) sent = sock.send(data.outb) sock.shutdown(socket.SHUT_WR) data.outb = data.outb[sent:]
Example #5
Source File: socketserver.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def serve_forever(self, poll_interval=0.5): """Handle one request at a time until shutdown. Polls for shutdown every poll_interval seconds. Ignores self.timeout. If you need to do periodic tasks, do them in another thread. """ self.__is_shut_down.clear() try: # XXX: Consider using another file descriptor or connecting to the # socket to wake this up instead of polling. Polling reduces our # responsiveness to a shutdown request and wastes cpu at all other # times. with _ServerSelector() as selector: selector.register(self, selectors.EVENT_READ) while not self.__shutdown_request: ready = selector.select(poll_interval) if ready: self._handle_request_noblock() self.service_actions() finally: self.__shutdown_request = False self.__is_shut_down.set()
Example #6
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_register(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() key = s.register(rd, selectors.EVENT_READ, "data") self.assertIsInstance(key, selectors.SelectorKey) self.assertEqual(key.fileobj, rd) self.assertEqual(key.fd, rd.fileno()) self.assertEqual(key.events, selectors.EVENT_READ) self.assertEqual(key.data, "data") # register an unknown event self.assertRaises(ValueError, s.register, 0, 999999) # register an invalid FD self.assertRaises(ValueError, s.register, -10, selectors.EVENT_READ) # register twice self.assertRaises(KeyError, s.register, rd, selectors.EVENT_READ) # register the same FD, but with a different object self.assertRaises(KeyError, s.register, rd.fileno(), selectors.EVENT_READ)
Example #7
Source File: socket_server_connector.py From clai with MIT License | 6 votes |
def loop(self, process_message: Callable[[bytes], Action]): self.sel.register(self.server_socket, selectors.EVENT_READ, data=None) try: while self.server_status_datasource.running: events = self.sel.select(timeout=None) for key, mask in events: if key.data is None: self.__accept_wrapper(key.fileobj) else: self.__service_connection(key, mask, process_message) self.sel.unregister(self.server_socket) self.server_socket.close() except KeyboardInterrupt: logger.info("caught keyboard interrupt, exiting") finally: logger.info("server closed") self.sel.close()
Example #8
Source File: svr_multiplex.py From Pyro5 with MIT License | 6 votes |
def loop(self, loopCondition=lambda: True): log.debug("entering multiplexed requestloop") while loopCondition(): try: try: events = self.selector.select(config.POLLTIMEOUT) except OSError: events = [] # get all the socket connection objects that have a READ event # (the WRITE events are ignored here, they're registered to let timeouts work etc) events_per_server = defaultdict(list) for key, mask in events: if mask & selectors.EVENT_READ: events_per_server[key.data].append(key.fileobj) for server, fileobjs in events_per_server.items(): server.events(fileobjs) if not events_per_server: self.daemon._housekeeping() except socket.timeout: pass # just continue the loop on a timeout except KeyboardInterrupt: log.debug("stopping on break signal") break
Example #9
Source File: telnetlib.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def interact(self): """Interaction function, emulates a very dumb telnet client.""" if sys.platform == "win32": self.mt_interact() return with _TelnetSelector() as selector: selector.register(self, selectors.EVENT_READ) selector.register(sys.stdin, selectors.EVENT_READ) while True: for key, events in selector.select(): if key.fileobj is self: try: text = self.read_eager() except EOFError: print('*** Connection closed by remote host ***') return if text: sys.stdout.write(text.decode('ascii')) sys.stdout.flush() elif key.fileobj is sys.stdin: line = sys.stdin.readline().encode('ascii') if not line: return self.write(line)
Example #10
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_unregister_after_fd_close_and_reuse(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() r, w = rd.fileno(), wr.fileno() s.register(r, selectors.EVENT_READ) s.register(w, selectors.EVENT_WRITE) rd2, wr2 = self.make_socketpair() rd.close() wr.close() os.dup2(rd2.fileno(), r) os.dup2(wr2.fileno(), w) self.addCleanup(os.close, r) self.addCleanup(os.close, w) s.unregister(r) s.unregister(w)
Example #11
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_get_map(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() keys = s.get_map() self.assertFalse(keys) self.assertEqual(len(keys), 0) self.assertEqual(list(keys), []) key = s.register(rd, selectors.EVENT_READ, "data") self.assertIn(rd, keys) self.assertEqual(key, keys[rd]) self.assertEqual(len(keys), 1) self.assertEqual(list(keys), [rd.fileno()]) self.assertEqual(list(keys.values()), [key]) # unknown file obj with self.assertRaises(KeyError): keys[999999] # Read-only mapping with self.assertRaises(TypeError): del keys[rd]
Example #12
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_select(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() s.register(rd, selectors.EVENT_READ) wr_key = s.register(wr, selectors.EVENT_WRITE) result = s.select() for key, events in result: self.assertTrue(isinstance(key, selectors.SelectorKey)) self.assertTrue(events) self.assertFalse(events & ~(selectors.EVENT_READ | selectors.EVENT_WRITE)) self.assertEqual([(wr_key, selectors.EVENT_WRITE)], result)
Example #13
Source File: test_selectors.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_select(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() s.register(rd, selectors.EVENT_READ) wr_key = s.register(wr, selectors.EVENT_WRITE) result = s.select() for key, events in result: self.assertTrue(isinstance(key, selectors.SelectorKey)) self.assertTrue(events) self.assertFalse(events & ~(selectors.EVENT_READ | selectors.EVENT_WRITE)) self.assertEqual([(wr_key, selectors.EVENT_WRITE)], result)
Example #14
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_timeout(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() s.register(wr, selectors.EVENT_WRITE) t = time() self.assertEqual(1, len(s.select(0))) self.assertEqual(1, len(s.select(-1))) self.assertLess(time() - t, 0.5) s.unregister(wr) s.register(rd, selectors.EVENT_READ) t = time() self.assertFalse(s.select(0)) self.assertFalse(s.select(-1)) self.assertLess(time() - t, 0.5) t0 = time() self.assertFalse(s.select(1)) t1 = time() dt = t1 - t0 # Tolerate 2.0 seconds for very slow buildbots self.assertTrue(0.8 <= dt <= 2.0, dt)
Example #15
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_select_interrupt_exc(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() class InterruptSelect(Exception): pass def handler(*args): raise InterruptSelect orig_alrm_handler = signal.signal(signal.SIGALRM, handler) self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler) self.addCleanup(signal.alarm, 0) signal.alarm(1) s.register(rd, selectors.EVENT_READ) t = time() # select() is interrupted by a signal which raises an exception with self.assertRaises(InterruptSelect): s.select(30) # select() was interrupted before the timeout of 30 seconds self.assertLess(time() - t, 5.0)
Example #16
Source File: test_selectors.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_select_interrupt_noraise(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() orig_alrm_handler = signal.signal(signal.SIGALRM, lambda *args: None) self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler) self.addCleanup(signal.alarm, 0) signal.alarm(1) s.register(rd, selectors.EVENT_READ) t = time() # select() is interrupted by a signal, but the signal handler doesn't # raise an exception, so select() should by retries with a recomputed # timeout self.assertFalse(s.select(1.5)) self.assertGreaterEqual(time() - t, 1.0)
Example #17
Source File: test_selectors.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_get_map(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() keys = s.get_map() self.assertFalse(keys) self.assertEqual(len(keys), 0) self.assertEqual(list(keys), []) key = s.register(rd, selectors.EVENT_READ, "data") self.assertIn(rd, keys) self.assertEqual(key, keys[rd]) self.assertEqual(len(keys), 1) self.assertEqual(list(keys), [rd.fileno()]) self.assertEqual(list(keys.values()), [key]) # unknown file obj with self.assertRaises(KeyError): keys[999999] # Read-only mapping with self.assertRaises(TypeError): del keys[rd]
Example #18
Source File: unix_events.py From Imogen with MIT License | 6 votes |
def __repr__(self): info = [self.__class__.__name__] if self._pipe is None: info.append('closed') elif self._closing: info.append('closing') info.append(f'fd={self._fileno}') selector = getattr(self._loop, '_selector', None) if self._pipe is not None and selector is not None: polling = selector_events._test_selector_event( selector, self._fileno, selectors.EVENT_READ) if polling: info.append('polling') else: info.append('idle') elif self._pipe is not None: info.append('open') else: info.append('closed') return '<{}>'.format(' '.join(info))
Example #19
Source File: selector_events.py From Imogen with MIT License | 6 votes |
def _remove_reader(self, fd): if self.is_closed(): return False try: key = self._selector.get_key(fd) except KeyError: return False else: mask, (reader, writer) = key.events, key.data mask &= ~selectors.EVENT_READ if not mask: self._selector.unregister(fd) else: self._selector.modify(fd, mask, (None, writer)) if reader is not None: reader.cancel() return True else: return False
Example #20
Source File: test_selectors.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_unregister_after_fd_close_and_reuse(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() r, w = rd.fileno(), wr.fileno() s.register(r, selectors.EVENT_READ) s.register(w, selectors.EVENT_WRITE) rd2, wr2 = self.make_socketpair() rd.close() wr.close() os.dup2(rd2.fileno(), r) os.dup2(wr2.fileno(), w) self.addCleanup(os.close, r) self.addCleanup(os.close, w) s.unregister(r) s.unregister(w)
Example #21
Source File: test_selectors.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_register(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() key = s.register(rd, selectors.EVENT_READ, "data") self.assertIsInstance(key, selectors.SelectorKey) self.assertEqual(key.fileobj, rd) self.assertEqual(key.fd, rd.fileno()) self.assertEqual(key.events, selectors.EVENT_READ) self.assertEqual(key.data, "data") # register an unknown event self.assertRaises(ValueError, s.register, 0, 999999) # register an invalid FD self.assertRaises(ValueError, s.register, -10, selectors.EVENT_READ) # register twice self.assertRaises(KeyError, s.register, rd, selectors.EVENT_READ) # register the same FD, but with a different object self.assertRaises(KeyError, s.register, rd.fileno(), selectors.EVENT_READ)
Example #22
Source File: telnetlib.py From Imogen with MIT License | 6 votes |
def interact(self): """Interaction function, emulates a very dumb telnet client.""" if sys.platform == "win32": self.mt_interact() return with _TelnetSelector() as selector: selector.register(self, selectors.EVENT_READ) selector.register(sys.stdin, selectors.EVENT_READ) while True: for key, events in selector.select(): if key.fileobj is self: try: text = self.read_eager() except EOFError: print('*** Connection closed by remote host ***') return if text: sys.stdout.write(text.decode('ascii')) sys.stdout.flush() elif key.fileobj is sys.stdin: line = sys.stdin.readline().encode('ascii') if not line: return self.write(line)
Example #23
Source File: telnetlib.py From ironpython3 with Apache License 2.0 | 6 votes |
def interact(self): """Interaction function, emulates a very dumb telnet client.""" if sys.platform == "win32": self.mt_interact() return with _TelnetSelector() as selector: selector.register(self, selectors.EVENT_READ) selector.register(sys.stdin, selectors.EVENT_READ) while True: for key, events in selector.select(): if key.fileobj is self: try: text = self.read_eager() except EOFError: print('*** Connection closed by remote host ***') return if text: sys.stdout.write(text.decode('ascii')) sys.stdout.flush() elif key.fileobj is sys.stdin: line = sys.stdin.readline().encode('ascii') if not line: return self.write(line)
Example #24
Source File: socketserver.py From Imogen with MIT License | 6 votes |
def serve_forever(self, poll_interval=0.5): """Handle one request at a time until shutdown. Polls for shutdown every poll_interval seconds. Ignores self.timeout. If you need to do periodic tasks, do them in another thread. """ self.__is_shut_down.clear() try: # XXX: Consider using another file descriptor or connecting to the # socket to wake this up instead of polling. Polling reduces our # responsiveness to a shutdown request and wastes cpu at all other # times. with _ServerSelector() as selector: selector.register(self, selectors.EVENT_READ) while not self.__shutdown_request: ready = selector.select(poll_interval) if ready: self._handle_request_noblock() self.service_actions() finally: self.__shutdown_request = False self.__is_shut_down.set()
Example #25
Source File: tcp_server_selectors.py From Learning-Python-Networking-Second-Edition with MIT License | 6 votes |
def service_connection(key, mask): sock = key.fileobj data = key.data if mask & selectors.EVENT_READ: recv_data = sock.recv(BUFFER_SIZE) if recv_data: data.outb += recv_data else: print('Closing connection in {}'.format(data.addr)) selector.unregister(sock) sock.close() if mask & selectors.EVENT_WRITE: if data.outb: print('Echo from {} to {}'.format(repr(data.outb), data.addr)) sent = sock.send(data.outb) data.outb = data.outb[sent:]
Example #26
Source File: tcp_client_selectors.py From Learning-Python-Networking-Second-Edition with MIT License | 6 votes |
def start_connections(host, port, num_conns): server_address = (host, port) for i in range(0, num_conns): connid = i + 1 print('Starting connection {} towards {}'.format(connid, server_address)) socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # We connect using connect_ex () instead of connect () socket_tcp.connect_ex(server_address) events = selectors.EVENT_READ | selectors.EVENT_WRITE data = types.SimpleNamespace(connid=connid, msg_total=sum(len(m) for m in messages), recv_total=0, messages=list(messages), outb=b'') selector.register(socket_tcp, events, data=data) events = selector.select() for key, mask in events: service_connection(key, mask)
Example #27
Source File: test_selectors.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_timeout(self): s = self.SELECTOR() self.addCleanup(s.close) rd, wr = self.make_socketpair() s.register(wr, selectors.EVENT_WRITE) t = time() self.assertEqual(1, len(s.select(0))) self.assertEqual(1, len(s.select(-1))) self.assertLess(time() - t, 0.5) s.unregister(wr) s.register(rd, selectors.EVENT_READ) t = time() self.assertFalse(s.select(0)) self.assertFalse(s.select(-1)) self.assertLess(time() - t, 0.5) t0 = time() self.assertFalse(s.select(1)) t1 = time() dt = t1 - t0 # Tolerate 2.0 seconds for very slow buildbots self.assertTrue(0.8 <= dt <= 2.0, dt)
Example #28
Source File: socket_client_connector.py From clai with MIT License | 5 votes |
def write(self, message: StateDTO): events = self.sel.select(timeout=5) key = events[0][0] client_socket = key.fileobj data = key.data self.sel.modify(client_socket, selectors.EVENT_WRITE, data) logger.info(f'echoing ${data}') data.outb = str(message.json()) sent = client_socket.send(data.outb.encode('utf-8')) data.outb = data.outb[sent:] self.sel.modify(client_socket, selectors.EVENT_READ, data)
Example #29
Source File: socket_server_connector.py From clai with MIT License | 5 votes |
def __service_connection(self, key, mask, process_message): fileobj = key.fileobj data = key.data if mask & selectors.EVENT_READ: data = self.__read(data, fileobj, process_message) if mask & selectors.EVENT_WRITE: self.__write(data, fileobj)
Example #30
Source File: socket_client_connector.py From clai with MIT License | 5 votes |
def start_connections(self, host, port): server_address = (host, port) client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.setblocking(False) client_socket.connect_ex(server_address) events = selectors.EVENT_READ | selectors.EVENT_WRITE data = types.SimpleNamespace( connid=self.uuid, outb=b'', ) self.sel.register(client_socket, events, data=data)