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:
- The
target
argument must be acallable
object not an "already-called" object. - 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"