| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- # Copyright (c) Opendatalab. All rights reserved.
- """
- MinerU API 多实例 URL 轮询
- 当 API_URL 配置为逗号分隔的多个地址时(多卡多实例),按请求轮询使用。
- """
- import threading
- from typing import List
- from ..config import DEFAULT_API_URL
- _DEFAULT_SINGLE = DEFAULT_API_URL
- _URL_LIST: List[str] = []
- _URL_INDEX: int = 0
- _URL_LOCK = threading.Lock()
- def _parse_api_url_list() -> List[str]:
- """从配置解析 URL 列表(逗号分隔,去空格)。"""
- raw = DEFAULT_API_URL.strip()
- if not raw:
- return [_DEFAULT_SINGLE]
- return [u.strip() for u in raw.split(",") if u.strip()] or [_DEFAULT_SINGLE]
- def _get_url_list() -> List[str]:
- """解析并缓存 API_URL 列表(逗号分隔)。"""
- global _URL_LIST
- with _URL_LOCK:
- if not _URL_LIST:
- _URL_LIST[:] = _parse_api_url_list()
- return list(_URL_LIST)
- def get_mineru_api_url_list() -> List[str]:
- """
- 返回 MinerU API 地址列表(用于单任务多卡:按页拆分后并行发到各实例)。
- 当 API_URL 为逗号分隔多地址时返回多元素;单地址时返回单元素列表。
- """
- return _get_url_list()
- def get_next_mineru_api_url() -> str:
- """
- 获取下一次应使用的 MinerU API 地址(线程安全轮询)。
- 当 API_URL 为多个地址(逗号分隔)时轮流返回;单地址则始终返回该地址。
- """
- global _URL_INDEX
- urls = _get_url_list()
- with _URL_LOCK:
- if len(urls) == 1:
- return urls[0]
- idx = _URL_INDEX % len(urls)
- _URL_INDEX += 1
- return urls[idx]
|