簡単なスレッドに関するチュートリアルに従っています。彼らはこの例を示しています、そして私がそれを使おうとすると、私は通訳から理解できないエラーを受け取ります。これが機能しない理由を教えてください。私は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のエラーによって開始されたスレッドの未処理の例外:
元の例外は次のとおりです。
エラーで欠落している情報は実際には出力で欠落しています。
問題は、新しいスレッドが終了する前にメインスレッドが終了したことです。解決策は、メインスレッドで待機することです。
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.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ループを入れれば、それはあなたのために働くでしょう。