69
index
modules |
next |
previous |
17.6.
asyncore
— Asynchronous socket handler
Source code: Lib/asyncore.py
This module provides the basic infrastructure for writing asynchronous socket service
clients and servers.
There are only two ways to have a program on a single processor do “more than one
thing at a time.” Multi-threaded programming is the simplest and most popular way to do
it, but there is another very different technique, that lets you have nearly all the
advantages of multi-threading, without actually using multiple threads. It’s really only
practical if your program is largely I/O bound. If your program is processor bound, then
pre-emptive scheduled threads are probably what you really need. Network servers are
rarely processor bound, however.
If your operating system supports the
select()
system call in its I/O library (and nearly
all do), then you can use it to juggle multiple communication channels at once; doing
other work while your I/O is taking place in the “background.” Although this strategy can
seem strange and complex, especially at first, it is in many ways easier to understand
and control than multi-threaded programming. The
asyncore
module solves many of the
difficult problems for you, making the task of building sophisticated high-performance
network servers and clients a snap. For “conversational” applications and protocols the
companion
asynchat
module is invaluable.
The basic idea behind both modules is to create one or more network channels,
instances of class
asyncore.dispatcher
and
asynchat.async_chat
. Creating the
channels adds them to a global map, used by the
loop()
function if you do not provide it
with your own map.
Once the initial channel(s) is(are) created, calling the
loop()
function activates channel
service, which continues until the last channel (including any that have been added to the
map during asynchronous service) is closed.
asyncore.
loop
(
[
timeout
[
, use_poll
[
, map
[
, count
]]]]
)
Enter a polling loop that terminates after count passes or all open channels have been
closed. All arguments are optional. The count parameter defaults to None, resulting in
the loop terminating only when all channels have been closed. The timeout argument
sets the timeout parameter for the appropriate
select()
or
poll()
call, measured in
Python » Python v2.7.6 documentation » The Python Standard Library » 17. Interprocess
Communication and Networking »