传递参数的Python线程
我试图向服务器传递一些参数,但不知道如何传递 这是我的代码:传递参数的Python线程,python,multithreading,Python,Multithreading,我试图向服务器传递一些参数,但不知道如何传递 这是我的代码: HOST, PORT = socket.gethostbyname( socket.gethostname() ), 31000 self.server = SocketServer.ThreadingTCPServer( ( HOST, PORT ), MCRequestHandler ) ip, port = self.server.server_address self.server_thread = threa
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类?我认为ThreadingCPServer的第二个参数是工厂:
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)
我这样做了,但得到了这个错误。TypeError:\uuuu call\uuuu()接受1个位置参数,但提供了4个。有人知道原因是什么吗?@bronco:试试这个签名
def\uu call\uuuuuuuuo(self,*args,**kwargs)
并将args透明地传递给处理程序:YourRequestHandler(*args,**kwargs)
如果我这样做,我会得到ConnectionResetError:[WinError 10054]远程服务器已强制关闭现有连接host@broncoAbierto:将返回处理程序
添加到调用
@J.F.Sebastian仍在抱怨arg计数(取3,4)。我发现这个ServerSocket框架中的线程有点奇怪。我想我会选择Twisted。