Creating a multithreaded server using SocketServer framework in python

前端 未结 3 1293
野的像风
野的像风 2020-12-03 05:49
#!/usr/bin/env python
#-*- coding: utf-8 -*-

import sys
sys.dont_write_bytecode = True
import shlex
import subprocess
import SocketServer

sess = []

class TCPHandl         


        
相关标签:
3条回答
  • 2020-12-03 06:18

    Shouldn't you loop the

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

    Just a guess..

    0 讨论(0)
  • 2020-12-03 06:20
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    import sys
    sys.dont_write_bytecode = True
    import shlex
    import subprocess
    import SocketServer
    
    sess = []
    
    class TCPHandler(SocketServer.BaseRequestHandler):
        def handle(self):
            global sess
            sess.append(self.request)
            ip,port = self.client_address
            print "#%d: client %s:%d"%(len(sess),ip,port)
            while True:
                cmd = self.request.recv(8192)
                out = subprocess.check_output(shlex.split(cmd),stderr=subprocess.STDOUT,shell=True)
                self.request.send(out)
            self.request.close()
    class ThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer): pass
    
    if __name__ == "__main__":
        port = 4242
        svr = ThreadedTCPServer(("",port),TCPHandler)
        print ":%d"%port
        svr.serve_forever()
    
    0 讨论(0)
  • 2020-12-03 06:31

    It is much more simple than you think:

    class ThreadedTCPServer(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.
    0 讨论(0)
提交回复
热议问题