Hello everyone, I have started using multiprocessing module, which is now available with Python 2.6. It definitely opens up new possibilities.
Now, I developed a small GUI package, which is to be used from other programs. It uses multiprocessing and Pipes are used to pump image data/command to the GUI process. (I used multiprocessing because I got stack size problem if I used threading) It works great under Solaris environment, which is my primary development environment. When I tried the program under Linux (CentOS5), the program didn't work (it hung). My other programs that use multiprocessing work flawlessly under both Solaris and Linux. To investigate this problem, I create a much simpler test program. The test program uses only basic necessary codes, nothing else. But my simple test program still exhibits the same problem. My test program display a GUI Button using three possible approaches: (1) multiprocessing (Solaris - okay, Linux - hung) (2) threading (Solaris - okay, Linux - okay) (3) none (main thread) (Solaris - okay, Linux - okay) Is this a bug in a multiprocessing package? Or, I overlooked something? Any comments on resolving this problem will be greatly appreciated. The attached is my test program (sorry for posting a long program). Thank you! Aki Niimura #!/usr/bin/env python import sys, os import time import threading import multiprocessing from Tkinter import * ### ### class Panel ### class Panel: def __init__(self, subp='multip'): if subp == 'multip': print 'multiprocessing module to handle' # GUI process self.process1 = multiprocessing.Process(target=self.draw) self.process1.start() elif subp == 'thread': print 'threading module to handle' # GUI thread self.thread1 = threading.Thread(target=self.draw) self.thread1.start() # self.thread1.setDaemon(1) else: print 'main thread to handle' pass def draw(self): self.root = Tk() w = Button(self.root, text='Exit', command=self.root.quit) w.pack() self.root.mainloop() ### ### Main routine ### def main(): subp = 'multip' if len(sys.argv) >= 2: if not sys.argv[1] in ['multip', 'thread', 'none',]: print 'Invalid option: %s' % sys.argv[1] print "Valid options are 'multip', 'thread', 'none'" sys.exit(1) else: subp = sys.argv[1] panel = Panel(subp) if subp == 'none': panel.draw() while 1: time.sleep(1) pass if __name__ == '__main__': main() -- http://mail.python.org/mailman/listinfo/python-list