From 54dbaa1d8ae01b09fb24ceb7e247024add7aab32 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 30 Mar 2012 19:28:37 +0400 Subject: [PATCH] use queue for session responses --- modules/abe/__init__.pyc | Bin 14183 -> 14183 bytes modules/irc/__init__.py | 2 +- transports/stratum_http.py | 29 ++++++++++++++++------------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/modules/abe/__init__.pyc b/modules/abe/__init__.pyc index 7f7341f035c5cc2bd22deda285bb3e36a88d3a26..708ed8f2d0470ecc5ff26eba554b7f47cefb9802 100644 GIT binary patch delta 15 WcmaE!_dJh{`7T*~L~{T&eg(Mz diff --git a/modules/irc/__init__.py b/modules/irc/__init__.py index 83c3c63..59f0db6 100644 --- a/modules/irc/__init__.py +++ b/modules/irc/__init__.py @@ -34,7 +34,7 @@ class ServerProcessor(Processor): if self.native_port: s+= 'n' + self.native_port + ' ' if self.stratum_tcp_port: - s += 's' + self.stratum_tcp_port + ' ' + s += 't' + self.stratum_tcp_port + ' ' if self.stratum_http_port: s += 'h' + self.stratum_http_port + ' ' return s diff --git a/transports/stratum_http.py b/transports/stratum_http.py index 419b1ad..25e0738 100644 --- a/transports/stratum_http.py +++ b/transports/stratum_http.py @@ -112,11 +112,10 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher): continue session = self.sessions.get(session_id) - if session: - self.dispatcher.process(session, req_entry) - if req_entry['method'] == 'server.stop': - return json.dumps({'result':'ok'}) - + self.dispatcher.process(session, req_entry) + + if req_entry['method'] == 'server.stop': + return json.dumps({'result':'ok'}) r = self.poll_session(session_id) for item in r: @@ -194,12 +193,12 @@ class StratumJSONRPCRequestHandler( c = self.headers.get('cookie') if c: if c[0:8]=='SESSION=': - print "found cookie", c[8:] + #print "found cookie", c[8:] session_id = c[8:] if session_id is None: session_id = self.server.create_session() - print "setting cookie", session_id + #print "setting cookie", session_id response = self.server._marshaled_dispatch(session_id, data) self.send_response(200) @@ -266,25 +265,29 @@ class StratumJSONRPCServer(SocketServer.TCPServer, StratumJSONRPCDispatcher): self.sessions[session_id] = HttpSession(session_id) return session_id - def poll_session(self,session_id): - responses = self.sessions[session_id].pending_responses[:] - self.sessions[session_id].pending_responses = [] - print "poll: %d responses"%len(responses) + def poll_session(self, session_id): + q = self.sessions[session_id].pending_responses + responses = [] + while not q.empty(): + r = q.get() + responses.append(r) + #print "poll: %d responses"%len(responses) return responses from processor import Session +import Queue class HttpSession(Session): def __init__(self, session_id): Session.__init__(self) - self.pending_responses = [] + self.pending_responses = Queue.Queue() print "new http session", session_id def send_response(self, response): raw_response = json.dumps(response) - self.pending_responses.append(response) + self.pending_responses.put(response) class HttpServer(threading.Thread): def __init__(self, dispatcher, host, port): -- 1.7.1