简体   繁体   English

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

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

I'm following a tutorial on simple threading. 我正在关注有关简单线程的教程。 They give this example and when I try to use it I'm getting unintelligible errors from the interpreter. 他们给出了这个例子,当我尝试使用它时,我从解释器中收到了难以理解的错误。 Can you please tell me why this isn't working? 您能告诉我为什么这不起作用吗? I'm on WinXP SP3 w/ Python 2.6 current 我在使用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

Executing this results in:: 执行此操作将导致:

Unhandled exception in thread started by Error in sys.excepthook: sys.excepthook中的Error启动的线程中未处理的异常:

Original exception was: 最初的例外是:

The information missing in the error is actually missing in the output. 错误中丢失的信息实际上在输出中丢失。

The problem is that your main thread has quit before your new thread has time to finish. 问题在于您的主线程在新线程有时间完成之前已经退出。 The solution is to wait at your main thread. 解决方案是在主线程上等待。

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)

As a side note, you probably want to use the threading module. 附带说明,您可能要使用线程模块。 Your main thread will wait for all of those types of threads to be closed before exiting: 您的主线程将在退出之前等待所有这些类型的线程关闭:

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

You need to wait until your Thread finishes its work, so you have to use Thread.join() : 您需要等待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

Put while loop at last then it will work for you. 最后放置while循环,然后它将为您工作。

I tried it in Python 2.5 on a mac, after changing 更改后,我在Mac上的Python 2.5中进行了尝试

except Exception as errtxt:

to

except Exception, errtxt:

The program did not throw an exception but also did not print anything. 该程序未引发异常,但也未打印任何内容。 Not sure if that is helpful, but I do find it curious... 不确定是否有帮助,但我确实感到好奇...

When I ran this code in Python 2.6 it worked, is it possible you have open threads already that are locked on the function? 当我在Python 2.6中运行此代码时,它起作用了,是否可能已经有锁定该函数的开放线程? I recommend closing Python completely, checking your running processes to make sure nothing of yours is running and try again. 我建议完全关闭Python,检查您正在运行的进程以确保您的进程没有任何运行,然后重试。

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

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