[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