Я использую 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
есть длинный код, поэтому я хочу написать его как класс.
Первый вопрос: кому я могу написать это как класс? Во-вторых, многопоточность класса при прослушивании сокетов имеет какие-либо недостатки (значительная разница в использовании памяти и т. Д.) Над распараллеливанием функции?