2011-06-17 113 views
4

我试图传递一些参数到服务器端,但我不知道如何?Python线程传递参数

这是我的代码:

HOST, PORT = socket.gethostbyname(socket.gethostname()), 31000 
self.server = SocketServer.ThreadingTCPServer((HOST, PORT), MCRequestHandler) 
ip, port = self.server.server_address   
self.server_thread = threading.Thread(target = self.server.serve_forever) 

这是MCRequestHandler

class MCRequestHandler(SocketServer.BaseRequestHandler): 

    global Lidars, clientsLock, postbox 
    Lidars = [] 
    postbox = {} 
    clientsLock = threading.RLock()  

    def setup(self): 
     clientsLock.acquire() 

如何传递一个或两个参数的MCRequestHandler类?

回答

3

我觉得ThreadingTCPServer的第二个参数是厂家:

SocketServer.ThreadingTCPServer((HOST, PORT), MCRequestHandler) 

你可以做什么是你自己的工厂在这里。类将持续可调用的对象。当对象被调用时,它将初始化MCRequestHandler给定的出厂参数:

class MyRequestHandlerFactory(object): 

    def __init__(self, param1, param2): 
      self.param1 = param1 
      self.param2 = param2 

    def __call__(self): 
      handler = MCRequestHandler() 
      handler.param1 = param1 
      handler.param2 = param2 

然后初始化:

factory = MyRequestHandlerFactory("x", "y") 
    SocketServer.ThreadingTCPServer((HOST, PORT), factory) 
+0

我这样做,但得到这个错误。 TypeError:__call __()需要1个位置参数,但给出了4个。有谁知道可能是什么原因? – broncoAbierto

+0

@bronco:试试这个签名'def __call __(self,* args,** kwargs)'并且透明地传递参数给处理程序:'YourRequestHandler(* args,** kwargs)' – jfs

+0

如果我这样做了,我会得到ConnectionResetError: [WinError 10054]现有连接被远程主机强制关闭 – broncoAbierto