[Python-checkins] cpython: More realistic example for selectors.py.
guido.van.rossum
python-checkins at python.org
Fri Nov 29 23:53:11 CET 2013
http://hg.python.org/cpython/rev/2a679870d7d2
changeset: 87643:2a679870d7d2
user: Guido van Rossum <guido at python.org>
date: Fri Nov 29 14:51:18 2013 -0800
summary:
More realistic example for selectors.py.
files:
Doc/library/selectors.rst | 65 ++++++++++++++------------
1 files changed, 36 insertions(+), 29 deletions(-)
diff --git a/Doc/library/selectors.rst b/Doc/library/selectors.rst
--- a/Doc/library/selectors.rst
+++ b/Doc/library/selectors.rst
@@ -210,33 +210,40 @@
:func:`select.kqueue` object.
-Examples of selector usage::
+Examples
+--------
- >>> import selectors
- >>> import socket
- >>>
- >>> s = selectors.DefaultSelector()
- >>> r, w = socket.socketpair()
- >>>
- >>> r.setblocking(False)
- >>> w.setblocking(False)
- >>>
- >>> s.register(r, selectors.EVENT_READ)
- SelectorKey(fileobj=<socket.socket fd=4, family=AddressFamily.AF_UNIX, type=2049, proto=0>, fd=4, events=1, data=None)
- >>> s.register(w, selectors.EVENT_WRITE)
- SelectorKey(fileobj=<socket.socket fd=5, family=AddressFamily.AF_UNIX, type=2049, proto=0>, fd=5, events=2, data=None)
- >>>
- >>> print(s.select())
- [(SelectorKey(fileobj=<socket.socket fd=5, family=AddressFamily.AF_UNIX, type=2049, proto=0>, fd=5, events=2, data=None), 2)]
- >>>
- >>> for key, events in s.select():
- ... if events & selectors.EVENT_WRITE:
- ... key.fileobj.send(b'spam')
- ...
- 4
- >>> for key, events in s.select():
- ... if events & selectors.EVENT_READ:
- ... print(key.fileobj.recv(1024))
- ...
- b'spam'
- >>> s.close()
+Here is a simple echo server implementation::
+
+ import selectors
+ import socket
+
+ sel = selectors.DefaultSelector()
+
+ def accept(sock, mask):
+ conn, addr = sock.accept() # Should be ready
+ print('accepted', conn, 'from', addr)
+ conn.setblocking(False)
+ sel.register(conn, selectors.EVENT_READ, read)
+
+ def read(conn, mask):
+ data = conn.recv(1000) # Should be ready
+ if data:
+ print('echoing', repr(data), 'to', conn)
+ conn.send(data) # Hope it won't block
+ else:
+ print('closing', conn)
+ sel.unregister(conn)
+ conn.close()
+
+ sock = socket.socket()
+ sock.bind(('localhost', 1234))
+ sock.listen(100)
+ sock.setblocking(False)
+ sel.register(sock, selectors.EVENT_READ, accept)
+
+ while True:
+ events = sel.select()
+ for key, mask in events:
+ callback = key.data
+ callback(key.fileobj, mask)
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list