在 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,您的开销非常低叫你做。 我觉得这个时候,可以忽略了。