gpt4 book ai didi

python - 使用 python socketserver 如何将变量传递给处理程序类的构造函数

转载 作者:IT老高 更新时间:2023-10-28 20:59:29 25 4
gpt4 key购买 nike

我想将我的数据库连接传递给 EchoHandler 类,但是我完全不知道该怎么做或访问 EchoHandler 类。

class EchoHandler(SocketServer.StreamRequestHandler):    def handle(self):        print self.client_address, 'connected'if __name__ == '__main__':    conn = MySQLdb.connect (host = "10.0.0.5", user = "user", passwd = "pass", db = "database")    SocketServer.ForkingTCPServer.allow_reuse_address = 1    server = SocketServer.ForkingTCPServer(('10.0.0.6', 4242), EchoHandler)    print "Server listening on localhost:4242..."    try:        server.allow_reuse_address        server.serve_forever()    except KeyboardInterrupt:        print "\nbailing..."

最佳答案

不幸的是,没有一种简单的方法可以直接从服务器外部访问处理程序。

您有两个选项可以将信息传递给 EchoHandler 实例:

  1. 将连接存储为服务器的属性(在调用 server_forever() 之前添加 server.conn = conn),然后通过 self.server.conn.
  2. 您可以覆盖服务器的 finish_request 并在那里分配值(您必须将其传递给 EchoHandler 的构造函数并覆盖 EchoHandler.__init__)。这是一个更加困惑的解决方案,它几乎需要您将连接存储在服务器上。

我的最佳选择:

class EchoHandler(SocketServer.StreamRequestHandler):
def handle(self):
# I have no idea why you would print this but this is an example
print( self.server.conn );
print self.client_address, 'connected'

if __name__ == '__main__':
SocketServer.ForkingTCPServer.allow_reuse_address = 1

server = SocketServer.ForkingTCPServer(('10.0.0.6', 4242), EchoHandler)
server.conn = MySQLdb.connect (host = "10.0.0.5",
user = "user", passwd = "pass", db = "database")
# continue as normal

关于python - 使用 python socketserver 如何将变量传递给处理程序类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6875599/

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