threading troubles

Jean-Paul Calderone exarkun at divmod.com
Mon Jul 10 08:36:23 EDT 2006


On Mon, 10 Jul 2006 11:29:37 +0000, sreekant <skodela at lithium.com> wrote:
>Hi folks
>
>What am I doing wrong in the following? I just want to run fluidsynth in
>the background.
>#########################################
>class MyThread(threading.Thread):
>     def __init__(self, cmd, callback):
>         self.__cmd = cmd
>         self.__callback = callback
>         threading.Thread.__init__(self)
>
>     def run(self):
>         os.system(self.__cmd)
>         self.__callback('abcd')
>         return
>
>
>cmd=midiplay+' '+fmidi
>xc=MyThread(cmd,addlog)
>xc.start()
>

You don't need threads to run another process "in the background".  For example, here's how you would do it with Twisted:

from twisted.internet import gtk2reactor
gtk2reactor.install()

from twisted.internet import reactor

def main():
    reactor.spawnProcess(
        None,
        '/usr/bin/fluidsynth',
        ['fluidsynth', '-ni', '/home/mysndfont.sf2', 'mymidi.mid'])
    reactor.run()

Your Gtk app won't block and you won't have to worry about the 
threading/forking/signal interaction that is messing you up now.

Jean-Paul



More information about the Python-list mailing list