在Python中处理类中的套接字进程

时间:2015-04-24 06:59:38

标签: python multithreading sockets python-2.6

我正在使用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线程函数?

1 个答案:

答案 0 :(得分:1)

线程类和线程函数之间没有区别。

基本上,您启动的每个线程都会运行一个函数。

然后,线程化一个类意味着编写一个带有入口点函数的类,它将管理您的实例。你要写的只有:

thread.start_new_thread(myClassInstance.handle_data, (conn, self.buffsize))

唯一的区别是使用类,由于self参数传递给您执行的每个方法调用,因此开销非常低。 我认为,在这一点上,你可以忽略它。