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 回答