2013-03-06 78 views
3

以下代码给出了全局名称未定义的错误,但据我所知,名称定义的。我是Python新手,这是范围问题吗?Python线程给出全局名称未定义错误

import os, socket 
from threading import Thread 

class serv: 
    def __init__(self): 
     self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
     self.socket.bind(('', 443)) 

    def run(self): 
     self.socket.listen(10) 
     print "Listening" 
     self.conn, self.addr = self.socket.accept() 
     try: 
      Thread(target=clientThread, args=(self.conn,)).start() 
     except Exception, errtxt: 
      print errtxt 

    def exit(self): 
     print "Disconnected" 
     self.conn.close() 

    def clientThread(conn): 
     print "Connected" 
     while 1: 
      conn.send("Hello, worlds!\n") 

S = serv() 
S.run() 

特定的错误是

global name 'clientThread' is not defined 
+2

'pi'是一个概念loooooong在Raspberry Pi来到现场之前;请仅为数学常量使用'pi'标签。 :-) – 2013-03-06 21:02:27

+0

会这样,谢谢。 – 2013-03-06 21:04:45

回答

6

你应该使用

self.clientThread 
+0

那么修复了这个问题,现在更多!非常感谢。 – 2013-03-06 21:05:01

0

我会做这些改变:

(1)通selfself.clientThread

def run(self): 
    self.socket.listen(10) 
    print "Listening" 
    self.conn, self.addr = self.socket.accept() 
    try: 
     Thread(target=self.clientThread, args=(self,)).start() 
    except Exception, errtxt: 
     print errtxt 

(2)。参考selfclientThread

def clientThread(self): 
    print "Connected" 
    while 1: 
     self.conn.send("Hello, worlds!\n") 

另一种可能性是让你从对象的threading.Thread代替具有螺纹派生。然后你的代码看起来更像这样:

import os, socket 
from threading import Thread 

class serv(Thread): 
    def __init__(self): 
     super(serv, self).__init__() 
     self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
     self.socket.bind(('', 443)) 

    def run(self): 
     self.socket.listen(10) 
     print "Listening" 
     self.conn, self.addr = self.socket.accept() 
     try: 
      print "Connected" 
      while 1: 
       self.conn.send("Hello, worlds!\n") 
     except Exception, errtxt: 
      print errtxt 

    def exit(self): 
     print "Disconnected" 
     self.conn.close() 

S = serv() 
S.start() 
相关问题