使用thread.start_new_thread()在Python 2.6中进行简单的线程处理

时间:2009-05-11 19:32:17

标签: python multithreading python-2.6

我正在学习简单线程的教程。他们给出了这个例子,当我尝试使用它时,我从解释器中得到了难以理解的错误。你能告诉我为什么这不起作用吗?我正在使用WinXP SP3 w / 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 个答案:

答案 0 :(得分:24)

问题是你的主线程在你的新线程有时间完成之前已经退出了。解决方案是等待主线程。

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

答案 1 :(得分:16)

你需要等到你的Thread完成它的工作,所以你必须使用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

答案 2 :(得分:0)

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循环放在最后,然后它将对你有用。

答案 3 :(得分:-1)

我在更改

后在Mac上用Python 2.5尝试过
except Exception as errtxt:

except Exception, errtxt:

程序没有抛出异常但也没有打印任何东西。不确定这是否有用,但我发现它很好奇...

答案 4 :(得分:-1)

当我在Python 2.6中运行此代码时,它是否有效,是否有可能已经锁定在该函数上的开放线程?我建议完全关闭Python,检查你的运行进程,确保你的运行没有运行,然后重试。