1

ユーザー入力を比較する次のコードがあります

import thread,sys
if(username.get_text() == 'xyz' and password.get_text()== '123' ):
   thread.start_new_thread(run,()) 

def run():
  print "running client"
  start = datetime.now().second
  while True:
    try:
        host ='localhost'
        port = 5010
        time = abs(datetime.now().second-start)
        time = str(time)
        print time
        client = socket.socket()
        client.connect((host,port))
        client.send(time)
    except socket.error:
        pass

関数 run() を呼び出すだけで機能しますが、この関数を実行するスレッドを作成しようとすると、何らかの理由でスレッドが作成されず、run() 関数が実行されず、エラーを見つけることができません..

前もって感謝します...

4

2 に答える 2

4

threadingの代わりにモジュールを使用する必要がありますthread

他に何をしていますか?このようなスレッドを作成すると、スレッドがまだ実行中かどうかに関係なく、インタープリターは終了します

例えば:

import thread
import time

def run():
    time.sleep(2)
    print('ok')

thread.start_new_thread(run, ())

--> これにより以下が生成されます。

Unhandled exception in thread started by 
sys.excepthook is missing
lost sys.stderr

一方:

import threading
import time

def run():
    time.sleep(2)
    print('ok')

t=threading.Thread(target=run)
t.daemon = True  # set thread to daemon ('ok' won't be printed in this case)
t.start()

期待どおりに動作します。インタープリターをスレッドで待機させたくない場合は、生成されたスレッドで daemon=True* を設定するだけです。

*編集:例に追加

于 2012-04-28T15:23:25.527 に答える
0

threadは低レベルのライブラリです。threadingを使用する必要があります。

from threading import Thread
t = Thread(target=run, args=())
t.start()
于 2012-04-28T15:20:57.210 に答える