无法在python中创建一个线程

时间:2012-04-28 13:56:58

标签: python multithreading sockets client

我有以下代码来比较用户输入

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()函数没有被执行我无法找到任何错误..

提前致谢...

2 个答案:

答案 0 :(得分:3)

你真的应该使用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 *。

*编辑:在示例中添加了

答案 1 :(得分:0)

thread是一个低级库,您应该使用threading

from threading import Thread
t = Thread(target=run, args=())
t.start()