在Python 2.6中使用thread.start_new_thread()实现简单线程

14 投票
5 回答
58152 浏览
提问于 2025-04-15 11:31

我正在跟着一个关于简单线程的教程。他们给了一个例子,但我在使用的时候遇到了看不懂的错误信息。你能告诉我为什么这个不工作吗?我在使用Windows XP SP3和Python 2.6。

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

执行这个代码后出现了:

线程启动时发生未处理的异常

sys.excepthook中的错误:

原始异常是:

错误信息中缺少的内容实际上在输出中是缺失的。

5 个回答

1
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

while 1:
    pass

把while循环放在最后,这样它就能正常工作了。

18

你需要等你的线程完成它的工作,所以你得用 Thread.join() 这个方法:

from threading import Thread

def myfunction(mystring,*args):
    print mystring

if __name__ == '__main__':

    try:
        t = Thread(None,myfunction,None,('MyStringHere',1))
        t.start()
        t.join()
    except Exception as errtxt:
        print errtxt
26

问题在于,你的主线程在新线程完成之前就已经结束了。解决办法就是让主线程等一等。

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)

顺便提一下,你可能想用一下线程模块。这样你的主线程会等所有这些线程都结束后再退出:

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

撰写回答