(
self, request: HTTPRequest, callback: Callable[[HTTPResponse], None]
)
| 160 | self.tcp_client.close() |
| 161 | |
| 162 | def fetch_impl( |
| 163 | self, request: HTTPRequest, callback: Callable[[HTTPResponse], None] |
| 164 | ) -> None: |
| 165 | key = object() |
| 166 | self.queue.append((key, request, callback)) |
| 167 | assert request.connect_timeout is not None |
| 168 | assert request.request_timeout is not None |
| 169 | timeout_handle = None |
| 170 | if len(self.active) >= self.max_clients: |
| 171 | timeout = ( |
| 172 | min(request.connect_timeout, request.request_timeout) |
| 173 | or request.connect_timeout |
| 174 | or request.request_timeout |
| 175 | ) # min but skip zero |
| 176 | if timeout: |
| 177 | timeout_handle = self.io_loop.add_timeout( |
| 178 | self.io_loop.time() + timeout, |
| 179 | functools.partial(self._on_timeout, key, "in request queue"), |
| 180 | ) |
| 181 | self.waiting[key] = (request, callback, timeout_handle) |
| 182 | self._process_queue() |
| 183 | if self.queue: |
| 184 | gen_log.debug( |
| 185 | "max_clients limit reached, request queued. " |
| 186 | "%d active, %d queued requests." % (len(self.active), len(self.queue)) |
| 187 | ) |
| 188 | |
| 189 | def _process_queue(self) -> None: |
| 190 | while self.queue and len(self.active) < self.max_clients: |
nothing calls this directly
no test coverage detected