web-dev-qa-db-ja.com

Python 2.6 using thread.start_new_thread())での単純なスレッド化

簡単なスレッドに関するチュートリアルに従っています。彼らはこの例を示しています、そして私がそれを使おうとすると、私は通訳から理解できないエラーを受け取ります。これが機能しない理由を教えてください。私はWinXPSP3を使用していますw/Python 2.6 current

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のエラーによって開始されたスレッドの未処理の例外:

元の例外は次のとおりです。

エラーで欠落している情報は実際には出力で欠落しています。

13
pythoner27

問題は、新しいスレッドが終了する前にメインスレッドが終了したことです。解決策は、メインスレッドで待機することです。

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
25
Unknown

スレッドが作業を終了するまで待つ必要があるため、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
16
ismail
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ループを入れれば、それはあなたのために働くでしょう。

1
user3021191