Sobrescribir la clase Autobahn / Twisted WebsocketClientProtocol

Quiero anular mi clase WebSocketClientFactory para permitir que una cola de trabajo se llene con los datos entrantes. Aquí está el código de conexión que estoy tratando

factory = WebSocketClientFactory("ws://localhost:7096") job_queue = Queue.Queue() factory.protocol = BridgeSocket(job_queue) connectWS(factory) 

Y aquí está mi clase de socket:

 class BridgeSocket(WebSocketClientProtocol): def __init__(self,producer_queue): self.producer_queue = producer_queue def sendHello(self): self.sendMessage("hello") def onOpen(self): self.sendHello() ..... 

Sin embargo estoy recibiendo error

 exceptions.AttributeError: BridgeSocket instance has no __call__ method 

¿Hay alguna manera de compartir colas entre mis hilos principales y los websockets que creo dentro de ellos?

Una opción es hacer

 factory = WebSocketClientFactory("ws://localhost:7096") factory.job_queue = Queue.Queue() factory.protocol = BridgeSocket 

y luego accede a la cola compartida desde tu protocolo como este

 class BridgeSocket(WebSocketClientProtocol): def onMessage(self, payload, isBinary): self.factory.job_queue.put(payload) 

* Nota al margen: ¿Está utilizando el troncal AutobahnPython de GitHub? Debería usar una versión etiquetada o la última versión de PyPI (0.6.5). *

En caso de que alguien lo necesite, también probé este enfoque que funciona pero la solución de Oberstet parece muy elegante y eficiente.

 class BridgeSocket(WebSocketClientProtocol): def __init__(self,factory,job_queue): self.job_queue = job_queue self.factory=factory class BridgeSocketClientFactory(WebSocketClientFactory): def __init__(self,url,job_queue): WebSocketClientFactory.__init__(self,url) self.job_queue = job_queue def buildProtocol(self, addr): return BridgeSocket(self,self.job_queue) factory = BridgeSocketClientFactory("ws://localhost:7096",job_queue) connectWS(factory)