Event-Driven Socket Programs
Socket programs, particularly servers, must often be ready to perform many tasks at once. Example 19-1 accepts a connection request, then serves a single client until that client has finished—other connection requests must wait. This is not acceptable for servers in production use. Clients cannot wait too long: the server must be able to service multiple clients at once.
One approach that lets your program perform several tasks at once is
threading, covered in Chapter 14. Module
SocketServer
optionally supports threading, as
covered earlier in this chapter. An alternative to threading that can
offer better performance and scalability is
event-driven (also known as
asynchronous) programming.
An event-driven program sits in an event loop, where it waits for
events. In networking, typical events are “a client
requests connection,” “data arrived
on a socket,” and “a socket is
available for writing.” The program responds to each
event by executing a small slice of work to service that event, then
goes back to the event loop to wait for the next event. The Python
library supports event-driven network programming with low-level
select
module and higher-level
asyncore
and asynchat
modules.
Even more complete support for event-driven programming is in the
Twisted package (available at http://www.twistedmatrix.com), particularly
in subpackage
twisted.internet
.
The select Module
The select
module exposes a cross-platform low-level function that lets you implement ...
Get Python in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.