def on_ssl_created_cb(self, ssl_sock, check_free_worke=True): if not ssl_sock: raise Exception("on_ssl_created_cb ssl_sock None") appid = appid_manager.get_appid() if not appid: time.sleep(60) ssl_sock.close() raise http_common.GAE_Exception(1, "no appid can use") ssl_sock.appid = appid ssl_sock.host = ssl_sock.appid + ".appspot.com" if ssl_sock.h2: worker = HTTP2_worker(ssl_sock, self.close_cb, self.retry_task_cb, self._on_worker_idle_cb) self.h2_num += 1 else: worker = HTTP1_worker(ssl_sock, self.close_cb, self.retry_task_cb, self._on_worker_idle_cb) self.h1_num += 1 self.workers.append(worker) self.wait_a_worker_cv.notify() if check_free_worke: self.check_free_worker()
def get_worker(self): best_rtt = 9999 best_worker = None idle_num = 0 for worker in self.workers: if not worker.accept_task: continue if worker.version == "1.1": idle_num += 1 else: if len(worker.streams) == 0: idle_num += 1 rtt = worker.get_rtt_rate() if rtt < best_rtt: best_rtt = rtt best_worker = worker if idle_num == 0 or len(self.workers) < self.min_worker_num: self.create_more_worker() if best_worker: return best_worker ssl_sock = https_manager.get_ssl_connection() if not ssl_sock: raise http_common.GAE_Exception(1, "no ssl_sock") worker = self.on_ssl_created_cb(ssl_sock) return worker