Skip to content Skip to sidebar Skip to footer

Creating A Multithreaded Server Using Socketserver Framework In Python

#!/usr/bin/env python #-*- coding: utf-8 -*- import sys sys.dont_write_bytecode = True import shlex import subprocess import SocketServer sess = [] class TCPHandler(SocketServer

Solution 1:

It is much more simple than you think:

classThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer): pass

Than you just have to use your new ThreadedTCPServer instead of TCPServer.

For more information you can read some doc.

However in your code you made some mistakes:

  1. The target argument must be a callable object not an "already-called" object.
  2. To handle many requests you need to build a Threads pool. If you only use one thread it does not make any difference if it is the main thread or a "child" thread.

Solution 2:

#!/usr/bin/env python#-*- coding: utf-8 -*-import sys
sys.dont_write_bytecode = Trueimport shlex
import subprocess
import SocketServer

sess = []

classTCPHandler(SocketServer.BaseRequestHandler):
    defhandle(self):
        global sess
        sess.append(self.request)
        ip,port = self.client_address
        print"#%d: client %s:%d"%(len(sess),ip,port)
        whileTrue:
            cmd = self.request.recv(8192)
            out = subprocess.check_output(shlex.split(cmd),stderr=subprocess.STDOUT,shell=True)
            self.request.send(out)
        self.request.close()
classThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer): passif __name__ == "__main__":
    port = 4242
    svr = ThreadedTCPServer(("",port),TCPHandler)
    print":%d"%port
    svr.serve_forever()

Solution 3:

Shouldn't you loop the

server = SocketServer.TCPServer(('',1520), service)
t = Thread(target=server.serve_forever())
t.start()

Just a guess..

Post a Comment for "Creating A Multithreaded Server Using Socketserver Framework In Python"