在python中使用SocketServer框架创建多线程服务器 [英] Creating a multithreaded server using SocketServer framework in python
本文介绍了在python中使用SocketServer框架创建多线程服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#!/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()
推荐答案
它比您想象的简单得多:
It is much more simple than you think:
class ThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer): pass
比起您只需要使用新的ThreadedTCPServer
而不是TCPServer
.
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:
-
target
参数必须是callable
对象,而不是已经调用"的对象. - 要处理许多请求,您需要构建一个线程池.如果仅使用一个线程,则它是主线程还是子"线程没有什么区别.
- 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.
这篇关于在python中使用SocketServer框架创建多线程服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文