Python 线程传递参数

4 投票
1 回答
2129 浏览
提问于 2025-04-16 19:47

我想把一些参数传递给服务器线程,但我不知道该怎么做。

这是我的代码:

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类呢?

相关问题:

1 个回答

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)

撰写回答