I'm coming from Tcl-world ...

Andreas Leitgeb Andreas.Leitgeb at siemens.at
Mon Aug 5 16:12:31 CEST 2002

Oren Tirosh <oren-py-l at hishome.net> wrote:
> The asyncore documentation could be better. 
I had a look at  help("asyncore"), and it gave me headache :-(

> 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...
yes, and I think it would be quite easy (up to details) to do 
it in Python:  (the following is python-like, but pseudo-code)
The implementations are missing, and could be based on asyncore.

 module fileevents:
   # register a channel for watching reads, writes or errors
   #   fd (a file-object or a numeric os-filedescriptor)
   #   cb (callback: a function object taking a few parameters
   #         defined later.  Specifying Null here, will cancel
   #         a previously set up callback for that channel
   #   mode (what events to register for: readable,writable,error
   #      or more of them. If error is not registered for an fd
   #      at the time the internal select() returns one for the fd,
   #      then read- and/or write-callback will be called instead
   #      once and then the channel is automtically unregistered.)
   #   data (an arbitrary object, that will be passed to the 
   #      callback as is)
   def register(fd,cb,mode="read",data=None)
   reg=register   # alias :-)

   # if a timer is set, the internally called select is called with 
   #  an appropriate timeout, to awake at the first requested timer
   # after the callback returns, select is automatically called again,
   #  with the time left until the next waiting timer.
   def timer(seconds,cb,data=None,autoreset=0)
   # unregister a channel:
   unreg = lambda fd,mode,data=None: register(fd,None,mode,data)

   # the main loop: 
   #   calls select(), and when that finishes, calls all the 
   #   registered callback-functions whose condition is met
   #   and/or all timer-callbacks. Exceptions thrown by callbacks
   #   are caught, and handled: (e.g. printed out, or some
   #   registered exception-handler called)
   #  If there is no timer and no registered fileevent left, 
   #   or on some other condition (yet to be defined - perhaps a 
   #   special exception, as in asyncore), loop() finishes.
   def loop()

So much for the basic interface.
possible enhancements:
  allow identifying & cancelling of timers

Some of the suggested features even go beyond Tcl's current 
fileevents :-)

PS: this was a brainstorming, not yet a thought-out design.
Newsflash: Sproingy made it to the ground !
  read more ... <http://avl.enemy.org/sproingy/>

More information about the Python-list mailing list