我正在学习简单线程的教程。他们给出了这个例子,当我尝试使用它时,我从解释器中得到了难以理解的错误。你能告诉我为什么这不起作用吗?我正在使用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中的错误:
最初的例外是:
错误中缺少的信息在输出中实际上缺失。
答案 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,检查你的运行进程,确保你的运行没有运行,然后重试。