From c826c7da0d9bb863816174f7bc419a3219b3fa97 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Mon, 19 Aug 2019 13:30:45 -0300 Subject: [PATCH] take load into consideration when picking fastest --- torba/torba/client/basenetwork.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/torba/torba/client/basenetwork.py b/torba/torba/client/basenetwork.py index 5a4650a76..ad2f8e5eb 100644 --- a/torba/torba/client/basenetwork.py +++ b/torba/torba/client/basenetwork.py @@ -20,7 +20,8 @@ class ClientSession(BaseClientSession): super().__init__(*args, **kwargs) self._on_disconnect_controller = StreamController() self.on_disconnected = self._on_disconnect_controller.stream - self.bw_limit = self.framer.max_size = self.max_errors = 1 << 32 + self.framer.max_size = self.max_errors = 1 << 32 + self.bw_limit = -1 self.timeout = timeout self.max_seconds_idle = timeout * 2 self.response_time: Optional[float] = None @@ -31,6 +32,10 @@ class ClientSession(BaseClientSession): def available(self): return not self.is_closing() and self._can_send.is_set() and self.response_time is not None + @property + def pending_size(self): + return len(self.connection.pending_requests()) + async def send_request(self, method, args=()): try: start = perf_counter() @@ -215,7 +220,8 @@ class SessionPool: if not self.available_sessions: return None return min( - [(session.response_time, session) for session in self.available_sessions], key=itemgetter(0) + [(session.response_time * session.pending_size, session) for session in self.available_sessions], + key=itemgetter(0) )[1] def start(self, default_servers):