我正在使用Python 2.6和新的套接字和线程。
我需要编写一个套接字代码来列出某些端口。以下是我的相关套接字类:
class SocketServer(object):
"""
"""
def __init__(self, host, sock_port, buffsize=1024):
self.hostname = host
self.sock_port = sock_port
self.buffsize = buffsize
self.socket = None
def start(self):
print "Listening: "
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind((self.hostname, self.sock_port))
self.socket.listen(10)
while True:
conn, address = self.socket.accept()
thread.start_new_thread(handle_data, (conn, self.buffsize))
if __name__ == "__main__":
server = socketServer(ip, port)
try:
server.start()
except Exception as e:
print e
handle_data
是侦听相关某个端口的函数:
def handle_data(conn, buffsize):
while True:
try:
_veri = conn.recv(buffsize)
if not _veri:
break
except Exception as e:
break
# Do something else
conn.close()
一切正常,但是handle_data
有一些长代码,所以我想把它写成一个类。
第一个问题是,我可以把它作为一个类写吗?第二,在套接字侦听中线程化类有任何不满(相当大的内存使用差异等)ove线程函数?
答案 0 :(得分:1)
线程类和线程函数之间没有区别。
基本上,您启动的每个线程都会运行一个函数。
然后,线程化一个类意味着编写一个带有入口点函数的类,它将管理您的实例。你要写的只有:
thread.start_new_thread(myClassInstance.handle_data, (conn, self.buffsize))
唯一的区别是使用类,由于self
参数传递给您执行的每个方法调用,因此开销非常低。
我认为,在这一点上,你可以忽略它。