Hi,

I've recently encountered some problems with threads in a (python) gnome
panel applet.  My problem is that any spawned threads don't seem to get
scheduled and consequently never run (at least, not until the gtk
mainloop exits).  A simple example:

=============================================================
#!/usr/bin/python
import sys
sys.stdout = open('debug', 'w') # redirect stdout/stderr to a file
sys.stderr = sys.stdout

import gtk
gtk.gdk.threads_init()  # (!)
import gnome.applet
import gobject
import thread
import time

class AppletClass(gnome.applet.Applet):

    def __init__(self, applet, iid):
        self.__gobject_init__()
        self.applet = applet
        self.label = gtk.Label('Hello World')
        self.applet.add(self.label)
        thread.start_new_thread(self.thread_function, ())

    def thread_function(self):
        sys.stdout.write('Thread started.\n')
        sys.stdout.flush()
        while True:
            sys.stdout.write('I like threads.\n')
            sys.stdout.flush()
            time.sleep(1)

gobject.type_register(AppletClass)

def class_applet_factory(applet, iid):
    AppletClass(applet,iid)
    return gtk.TRUE

gnome.applet.bonobo_factory("OAFIID:GNOME_PythonAppletSample_Factory",
                            AppletClass.__gtype__,
                            "hello", "0", class_applet_factory)
=============================================================

I expect this applet (with the appropriate bonobo .server file) to show
a "Hello World" label in the panel and write "I love threads." to stdout
(which is redirected to a file "debug" in this case).  The widget part
works fine, but the stdout thread is never run (nothing written to stdout).

Points to note:

* My applet (of which the above is a highly simplified version) used to
work; a recent update of gnome-python seems to have broken it, but I'm
not sure exactly when.

* For threaded applications, gtk.gdk.threads_init() is supposed to be
called before gtk.main, but in the case of an applet, aren't we already
inside gtk.main?  Can/should the threads_init call be moved elsewhere?

* I'm running Debian (unstable), relevant packages:
    python2.3-gtk2 (2.4.1-2)
    python2.3-gnome (2.6.1-1)
    python2.3 (2.3.4-19)
    libgtk2.0-0 (2.4.14-2)
    libgnome2-0 (2.8.0-6)

Does anybody know what/where the problem might be?  Is it most likely a
problem with gtk+, gnome, pygtk, pygnome or the Debian packaging?

thanks,
brad

+----------------------------------+----------+----------------------------+
| Brad Tonkes, Research Fellow     |          | There were too many of us, |
| Centre for Autonomous Systems,   |  _--_|\  | we had access to too much  |
| School of Computer Science and   | /      \ | money, too much equipment, |
|   Engineering                    | \_.--._* | and little by little, we   |
| UNSW, 2052                       |       v  | went insane.               |
| NSW, Australia                   |          |                            |
+----------------------------------+----------+----------------------------+
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to