On Wed, 2006-21-06 at 22:53 +0100, Magnus Therning wrote: > On Sun, Jun 18, 2006 at 12:32:52 +0200, Frederic Peters wrote: > >Magnus Therning wrote: > > > >> Does anyone have any examples of multi-threade extensions written in > >> Python? > > > >Nope but multi-thread is perhaps not necessary, PyGTK FAQ has a good > >suggestion about using gobject.idle_add and python enumerators. I > >have been using this trick in a few pygtk apps to keep them > >responsives while not using threads and have been very happy with it. > > > > http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq23.020.htp > > Isn't there an error in that recipe? > > my_task() will return a new generator each time it's called so the > following code wouldn't do what's intended, right? > > def on_start_my_task_button_click(data): > gobject.idle_add(my_task().next, data) > > I think what's intended is: > > def on_start_my_task_button_click(data): > task = my_task() > gobject.idle_add(task.next, data) > > Or did I miss something?
You're on the right track, but missing something. The function which is
being passed in gobject.idle_add() is the generator's ".next()" method.
So *that* method will be called time and time again until it returns
false.
Consider this analog:
def non_generator_fn(data):
if data.i == 0:
# "...some work..."
if data.i < 10:
# "...do heavy work here..."
data.i += 1
yield True
yield False
data.i = 0
gobject.idle_add(non_generator_fn, data)
In other words, at each iteration, the Python interpreter won't evaluate
"my_task().next()". Instead, when my_task().next is evaluated, a new
my_task generator *object* is created and its "next()" method is passed
to gobject.idle_add().
I don't know how that "data" argument in the example manages to make it
to the generator. But if that is indeed code from James Henstridge, it
probably works. He's a genius.
HTH,
--
Adam Hooper <[EMAIL PROTECTED]>
signature.asc
Description: This is a digitally signed message part
_______________________________________________ epiphany-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/epiphany-list
