gpt4 book ai didi

python - 在 python 中使用 SocketServer 框架创建多线程服务器

转载 作者:太空狗 更新时间:2023-10-29 17:33:42 24 4
gpt4 key购买 nike

#!/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()

最佳答案

它比你想象的要简单得多:

class ThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer): pass

您只需使用新的 ThreadedTCPServer 而不是 TCPServer

有关更多信息,您可以阅读 some doc .

但是在您的代码中您犯了一些错误:

  1. target 参数必须是一个可调用 对象,而不是“已调用”对象。
  2. 要处理许多请求,您需要构建一个线程池。如果您只使用一个线程,那么它是主线程还是“子”线程都没有任何区别。

关于python - 在 python 中使用 SocketServer 框架创建多线程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com