如何使用callfromthread调用twisted中的协议方法?

2024-09-24 00:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个twisted websocket客户机协议,在这个reactor循环中还有另一个socket服务器 如何从套接字服务器访问sendMessage方法? 我看到了这个link,但我不知道该怎么办。我试过了,但是我发现了一些错误:

reactor.callFromThread(WebSocketClientProtocol.sendMessage, protocol,  'data')
exceptions.TypeError: unbound method sendMessage() must be called with WebSocketClientProtocol instance as first argument (got module instance instead)

我的websocket客户端:

^{pr2}$

我用这个代码来解决这个问题:

class WebSocketProtocol(WebSocketClientProtocol):


   def onOpen(self):
        self.factory.data = []
        self.factory.data.append(self)

reactor.callFromThread(WebSocketClientProtocol.sendMessage, websocket_factory.data[0],  send)

Tags: 方法instanceself服务器协议data客户机factory
1条回答
网友
1楼 · 发布于 2024-09-24 00:22:16

callFromThread仅在程序中有多个线程时使用。仅仅因为你有多个服务器并不意味着你有多个线程。事实上,Twisted主要面向运行多个服务器(和/或客户机),而不使用任何额外的线程。在

但是,您遇到的具体错误是关于如何在实例上调用实例方法。在

WebSocketClientProtocol是一个类,WebSocketClientProtocol.sendMessage是一个未绑定的方法。这就像试图写:

class Foo(object):
    def bar(self):
        print "Foo.bar:", self

Foo.bar()

这并不比您尝试的更好,因为您当然需要一个实例:

^{pr2}$

相关问题 更多 >