重置代理池 :param force: 是否强制重置代理池 :return:
(self, force: bool = False)
| 599 | return self.proxy_queue.put_nowait(proxy_item) |
| 600 | |
| 601 | def reset_proxy_pool(self, force: bool = False): |
| 602 | """ |
| 603 | 重置代理池 |
| 604 | :param force: 是否强制重置代理池 |
| 605 | :return: |
| 606 | """ |
| 607 | if not self.reset_lock: |
| 608 | # 必须用时调用 否则 可能存在 gevent patch前 threading就已经被导入 导致的Rlock patch失效 |
| 609 | import threading |
| 610 | |
| 611 | self.reset_lock = threading.RLock() |
| 612 | with self.reset_lock: |
| 613 | if ( |
| 614 | force |
| 615 | or self.proxy_queue is None |
| 616 | or ( |
| 617 | self.max_queue_size > 0 |
| 618 | and self.proxy_queue.qsize() < self.max_queue_size / 2 |
| 619 | ) |
| 620 | or ( |
| 621 | self.max_queue_size < 0 |
| 622 | and self.proxy_queue.qsize() < self.real_max_proxy_count / 2 |
| 623 | ) |
| 624 | or self.no_valid_proxy_times >= 5 |
| 625 | ): |
| 626 | if time.time() - self.last_reset_time < self.reset_interval: |
| 627 | self.reset_fast_count += 1 |
| 628 | if self.reset_fast_count % 10 == 0: |
| 629 | self.logger.debug( |
| 630 | "代理池重置的太快了:) {}".format(self.reset_fast_count) |
| 631 | ) |
| 632 | time.sleep(1) |
| 633 | else: |
| 634 | self.clear() |
| 635 | if self.proxy_queue is None: |
| 636 | import queue |
| 637 | |
| 638 | self.proxy_queue = queue.Queue() |
| 639 | # TODO 这里获取到的可能重复 |
| 640 | proxies_list = get_proxy_from_url(**self.kwargs) |
| 641 | self.real_max_proxy_count = len(proxies_list) |
| 642 | if 0 < self.max_queue_size < self.real_max_proxy_count: |
| 643 | proxies_list = random.sample(proxies_list, self.max_queue_size) |
| 644 | _valid_count = self.append_proxies(proxies_list) |
| 645 | self.last_reset_time = time.time() |
| 646 | self.no_valid_proxy_times = 0 |
| 647 | self.logger.debug( |
| 648 | "重置代理池成功: 获取{}, 成功添加{}, 失效{}, 当前代理数{},".format( |
| 649 | len(proxies_list), |
| 650 | _valid_count, |
| 651 | len(self.invalid_proxy_dict), |
| 652 | len(self.proxy_dict), |
| 653 | ) |
| 654 | ) |
| 655 | return |
| 656 | |
| 657 | def tag_proxy(self, proxies_list: list, flag: int, *, delay=30) -> bool: |
| 658 | """ |
no test coverage detected