I'm coming from Tcl-world ...
Oren Tirosh
oren-py-l at hishome.net
Sat Aug 3 11:57:01 EDT 2002
On Sat, Aug 03, 2002 at 02:57:22PM +0100, Robin Becker wrote:
> In message <20020803133549.GA66035 at hishome.net>, Oren Tirosh <oren-py-
> l at hishome.net> writes
> >On Sat, Aug 03, 2002 at 11:46:28AM +0100, Robin Becker wrote:
> >> I've always thought it was a pity that Tcl's event driven file i/o
> >> didn't catch on elsewhere. Python seems locked into an older world in
> >> its low level i/o mechanisms although at higher levels it's very clean.
> >> Polling feels inefficient, but I guess is very robust.
> >
> >Have you tried asyncore?
> >
> > Oren
> >
> yes, it's quite a mess working out what's going on.
Yes, you're right. The asyncore documentation could be better. Actually it's
very simple to use:
Write an object with the following methods:
writable() - return true if you wish to get write events
readable() - return true if you wish to get read events
handle_error() - called on any errors
handle_write_event() - called on write event
handle_read_event() - called on read event
also called on EOF, in that case reading will return ''
set socket_map[fd] to point to this object (multiple objects, more likely)
call asyncore.loop(optional_timeout)
The loop will return either on timeout or when one of the handlers
raises the asyncore.ExitNow exception.
That's all.
Everything else is just predefined objects you can inherit that help you
handle the little details. The asyncore.dispatcher handles setting up the
socket, listening for incoming connections, etc. The dispatcher_with_send
has a buffered send function, file_dispatcher handles pipes and other
non-socket fds, the asynchat module helps you implement two-way stateful
protocols.
If you have any ideas how to make it easier to use I'd love to hear them,
whether they're tcl-inspired or not...
Oren
More information about the Python-list
mailing list