Thread lag
Piet van Oostrum
piet at cs.uu.nl
Sat Apr 25 16:19:51 EDT 2009
>>>>> Asterix <asterix at lagaule.org> (A) a écrit:
>A> Hi,
>A> Here is a small class I use in my GTK application, to do some job in a
>A> thread.:
>A> class ThreadInterface:
>A> def __init__(self, func, func_args, callback, callback_args):
>A> '''Call a function in a thread and then call callback'''
>A> def thread_function(func, func_args, callback, callback_args):
>A> print 'func start'
>A> output = func(*func_args)
>A> gobject.idle_add(callback, output, *callback_args)
>A> Thread(target=thread_function, args=(func, func_args, callback,
>A> callback_args)).start()
>A> print 'thread called'
>A> Here is the way I call the class:
>A> def decrypt_thread(encmsg, keyID):
>A> # Do things
>A> return val1, val2)
>A> def _on_message_decrypted(output, val):
>A> # blabla
>A> ThreadInterface(decrypt_thread, [encmsg, keyID], _on_message_decrypted,
>A> [val])
>A> But between the time "thread called" is printed and the time "func
>A> start" is printed, there is sometimes (it vary a lot) several seconds.
>A> How could it be? Why thread is not started instantly? How can I improve
>A> that?
I don't know if it is related to our problem but I guess it is.
It appears that GTK and Python threads are incompatible UNLESS you call
gtk.gdk.threads_init() before gtk.main(). This has something to do with
releasing the GIL, which gtk optimizes away if it hasn't been told that
your application uses threads.
--
Piet van Oostrum <piet at cs.uu.nl>
URL: http://pietvanoostrum.com [PGP 8DAE142BE17999C4]
Private email: piet at vanoostrum.org
More information about the Python-list
mailing list