在Python 2.6中使用thread.start_new_thread()实现简单线程
我正在跟着一个关于简单线程的教程。他们给了一个例子,但我在使用的时候遇到了看不懂的错误信息。你能告诉我为什么这个不工作吗?我在使用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