短缺问题
使用下面我的例子,有没有与该BaseRequestHandler同学分享my_object
的实际实例的Python的方式吗?BaseRequestHandler类有一种方法是有效的吗?
背景
根据定义,BaseRequestHandler类创建用于每个请求的新实例。因此,我正在努力寻找解决方案,以便如何将数据从handle()
函数返回到ProtocolInterface
实例。请注意,如果我需要在handle()
之外执行某些操作,而不是打印到标准输出,则这可能是错误的方法。
在这个时间点,我不相信全局变量会工作,因为my_object
被通过,预计经常改变(这就是为什么handle()
需要看到它。要查看示例客户端(发送伪造的数据)看到我other SO question。我想我现在面临的最大的问题是在socketservers在后台线程中运行。
的,我想什么为例做
class ProtocolHandler(SocketServer.BaseRequestHandler):
def handle(self):
while(1):
self.data = self.request.recv(1024)
if self.data == '':
break
self.request.send("Success")
self.my_object.success = True# <--- How can I share my_object's instance?
class ProtocolInterface():
def __init__(self, obj, host='127.0.0.1', port=8000, single_connection=False):
self.my_object = obj # <--- This ideally is the same instance seen in ProtocolHandler
self.host = host
self.port = port
# Create the socket server to process in coming traffic
if(single_connection):
self.server = SocketServer.TCPServer((self.host, self.port), ProtocolHandler)
else:
self.server = SocketServer.ThreadingTCPServer((self.host, self.port), ProtocolHandler)
def start(self):
print "Server Starting on HOST: " + self.host
server_thread = threading.Thread(target=self.server.serve_forever)
server_thread.daemon = True
server_thread.start()
'handle()'''while'循环中的代码似乎有不正确的缩进? – 2011-12-18 01:29:02
@Francis阿维拉。我猜它是为你设置线包裹的。减去self.my_object这是一个有效的例子。 – 2011-12-18 01:41:31