You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现:将API页号范围均匀拆分到指定线程,适配奇偶总页数场景

问题根源

原有逻辑仅给每个线程分配了向下取整的固定页数,没有处理总页数除以线程数的余数,导致总分配页数比实际总页数少余数对应的数量,最终遗漏最后几页。
比如9页2线程的场景,向下取整后每个线程固定分4页,总共仅分配了8页,剩余1页未被分配,最终最后一个线程的结束页比实际需要的少1,无法覆盖第9页。

修正方案

核心逻辑:

  • 先计算每个线程的基础分配页数base = 总页数 // 线程数(等价于原有的math.floor(总页数/线程数))
  • 计算余数remainder = 总页数 % 线程数,将这部分余数按每个线程1页的额度,分配给最后几个线程,保证所有线程的页数差不超过1,符合尽可能均衡的要求
  • 结合Pythonrange左闭右开的特性,每个线程的page_end直接取page_start + 当前分配页数,确保遍历范围完全覆盖所有目标页
修正后的代码
import math  # 若不使用math.floor可移除该行
pages = 9
threads = 2
# base = math.floor(pages / threads) 与下方整数除法写法等价
base = pages // threads
remainder = pages % threads

page_start = 1
for thread_idx in range(threads):
    # 余数分配给最后remainder个线程,每个多拿1页
    current_page_count = base + (1 if thread_idx >= (threads - remainder) else 0)
    page_end = page_start + current_page_count
    print(page_start, page_end)
    # 下一个线程的起始页为当前的结束页
    page_start = page_end

注:如果需要将多出来的余数分给靠前的线程,只需将判断条件改为thread_idx < remainder即可,不影响整体均衡性。

场景验证

奇数总页数(pages=9,threads=2)

输出结果:

1 5
5 10

对应遍历范围:range(1,5)覆盖1-4页,range(5,10)覆盖5-9页,完全符合预期。

偶数总页数(pages=8,threads=2)

输出结果:

1 5
5 9

对应遍历范围:range(1,5)覆盖1-4页,range(5,9)覆盖5-8页,运行正常无异常。


内容的提问来源于stack exchange,提问作者simplycoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 19:27:05