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

如何让tqdm在结合primesieve的Python while循环中显示进度条?

问题分析与解决方案

你的代码无法正常显示进度条的核心原因是:

  • 进度条的total参数设为了n(比如2**32是42亿+),但循环的实际迭代次数是小于等于n的素数个数(2**32的素数约2亿个),两者量级差距极大
  • 每次调用update(prime)是错误的,因为每次循环仅处理1个素数,应该更新1步而非当前素数的数值

修正后的代码

首先确保安装tqdm:

pip install tqdm

使用primesieve.count_primes(n)快速获取素数总数,以此作为进度条的总步数,每次循环更新1步:

import primesieve
from tqdm import tqdm

def prob(n):
    it = primesieve.Iterator()
    p = 1
    prime = it.next_prime()
    # 获取小于等于n的素数总数,作为进度条总进度
    total_primes = primesieve.count_primes(n)
    with tqdm(total=total_primes) as pbar:
        while prime <= n:
            p *= (1 - 1/prime)
            prime = it.next_prime()
            pbar.update(1)
    return p

关键说明

  1. primesieve.count_primes(n)是primesieve库提供的高效函数,能快速计算小于等于n的素数数量,不会引入额外性能开销
  2. 使用with语句可以自动完成进度条的初始化与关闭,避免资源泄漏
  3. 每次循环调用pbar.update(1),对应处理1个素数的进度,确保进度条显示准确

测试时直接调用prob(2**32)即可看到正常推进的进度条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:10:26