Simple threading in Python 2.6 using thread.start_new_thread()

pythoner27 picture pythoner27 · May 11, 2009 · Viewed 56.3k times · Source

I'm following a tutorial on simple threading. They give this example and when I try to use it I'm getting unintelligible errors from the interpreter. Can you please tell me why this isn't working? I'm on WinXP SP3 w/ Python 2.6 current

import thread

def myfunction(mystring,*args):
    print mystring


if __name__ == '__main__':

    try:

        thread.start_new_thread(myfunction,('MyStringHere',1))

    except Exception as errtxt:
        print errtxt

Executing this results in::

Unhandled exception in thread started by Error in sys.excepthook:

Original exception was:

The information missing in the error is actually missing in the output.

Answer

Unknown picture Unknown · May 11, 2009

The problem is that your main thread has quit before your new thread has time to finish. The solution is to wait at your main thread.

import thread, time

def myfunction(mystring,*args):
    print mystring


if __name__ == '__main__':

    try:

        thread.start_new_thread(myfunction,('MyStringHere',1))

    except Exception, errtxt:
        print errtxt

    time.sleep(5)

As a side note, you probably want to use the threading module. Your main thread will wait for all of those types of threads to be closed before exiting:

from threading import Thread

def myfunction(mystring,*args):
    print mystring


if __name__ == '__main__':

    try:
        Thread(target=myfunction, args=('MyStringHere',1)).start()
    except Exception, errtxt:
        print errtxt