在 Python 中的 class 中处理套接字进程
Handling socket process in a class in Python
我正在使用 Python 2.6 和新的套接字和线程。
我需要编写套接字代码来列出某些端口。以下是我的相关套接字 class:
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
有一些长代码,所以我想把它写成 class。
第一个问题是,谁可以把它写成class?其次,在套接字监听中线程化 class 有任何缺点(相当大的内存使用差异等)over threading a function?
线程化 class 和线程化函数没有区别。
基本上,您启动的每个线程都将 运行 一个函数。
然后,线程化 class 意味着编写一个带有 入口点 函数的 class,它将管理您的实例。您只需要写:
thread.start_new_thread(myClassInstance.handle_data, (conn, self.buffsize))
唯一的 区别 是使用 class,由于传递给每个方法的参数 self
,您的开销非常低叫你做。
我觉得这个时候,可以忽略了。
我正在使用 Python 2.6 和新的套接字和线程。
我需要编写套接字代码来列出某些端口。以下是我的相关套接字 class:
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
有一些长代码,所以我想把它写成 class。
第一个问题是,谁可以把它写成class?其次,在套接字监听中线程化 class 有任何缺点(相当大的内存使用差异等)over threading a function?
线程化 class 和线程化函数没有区别。
基本上,您启动的每个线程都将 运行 一个函数。
然后,线程化 class 意味着编写一个带有 入口点 函数的 class,它将管理您的实例。您只需要写:
thread.start_new_thread(myClassInstance.handle_data, (conn, self.buffsize))
唯一的 区别 是使用 class,由于传递给每个方法的参数 self
,您的开销非常低叫你做。
我觉得这个时候,可以忽略了。