Asynchronous I/O (and other tasks) proceeding in fits and spasms The SpasmodicEngine selects tasks (spasmoids) from a (heapqueue based) priority queue. The tasks are Python 2.5 extended generators (some call them coroutines: PEP 342). The engine calls task.send() with an appropriate argument. One of the library of tasks is Pollster. Pollster calls poll() with for tasks that are waiting I/O. Tasks that are ready for I/O are fed to the priority queue.
Spasmodic provides an efficient way to manage a large number of sockets and/or files. Other processing works well too, if it can be subdivided into brief spasms.
added periodic logger, rigged echo server to log byte counts
added client case to the echo example, this showed up several bugs in handling multiple connections and large messages, which are corrected