繁体   English   中英

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

[英]Simple threading in Python 2.6 using thread.start_new_thread()

我正在关注有关简单线程的教程。 他们给出了这个例子,当我尝试使用它时,我从解释器中收到了难以理解的错误。 您能告诉我为什么这不起作用吗? 我在使用Python 2.6的WinXP SP3上

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中的Error启动的线程中未处理的异常:

最初的例外是:

错误中丢失的信息实际上在输出中丢失。

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

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

您需要等待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
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循环,然后它将为您工作。

更改后,我在Mac上的Python 2.5中进行了尝试

except Exception as errtxt:

except Exception, errtxt:

该程序未引发异常,但也未打印任何内容。 不确定是否有帮助,但我确实感到好奇...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM