So what I'm doing is a WSGI streaming service record that uses an iterated wrapped queue to implement multicast push. The following is a simplified service model:
def processor_runner():
generator = SerialMessageGenerator()
for message in generator:
for client in Processor.connections:
client.put(message)
def main(environ, start_response):
queue = Queue()
Processor.connections.append(queue)
status = '200 OK'
response_headers = [
('Content-Type', 'application/json'),
('Transfer-Encoding', 'chunked')
]
start_response(status, response_headers)
return iter(queue.get, None)
WSGI ( , - , ). : , , , ? , , .. (, ), , , put. , , . - - , - ?
, , , :
class IterableQueue(Queue):
def __init__(self):
Queue.__init__(self)
ShellProcessor.connections.append(self)
def __iter__(self):
return iter(self.get, None)
def close(self):
self.put(None)
self.task_done()
ShellProcessor.connections.remove(self)