from tqdm import tqdm的全面解析

一、 簡介

在Python語言中,tqdm庫是一個提供進度條、可迭代對象和時間差等功能的庫。它能夠幫助程序員更加直觀地了解代碼的運行進度,從而更好地優化代碼、提高效率。其中最常用的功能是進度條,它可以幫助程序員清晰地看到某個任務執行的進度情況和當前耗時。

二、 tqdm的基礎用法

假設我們有一個需要處理的可迭代對象,例如一個長度為10的列表,並進行處理。假設我們想要在處理過程中輸出進度條,代碼如下:


from tqdm import tqdm
for i in tqdm(range(10)):
    do_something(i)

以上代碼將在處理過程中輸出一個進度條,另外還會顯示當前處理的進度百分比和預計剩餘時間等信息。

如果想要在處理過程中顯示更多的信息,也可以自己指定格式,例如:


from tqdm import tqdm
for i in tqdm(range(10), desc="Processing", bar_format="{l_bar}{bar} | {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}{postfix}]"):
    do_something(i)

以上代碼中,desc參數用於指定進度條前面的標題;bar_format參數用於指定進度條的格式。其中,”l_bar”表示左邊的進度條,”bar”表示中間的進度條,”n_fmt”表示當前正在處理的數值,”total_fmt”表示總共需要處理的數值,”elapsed”表示當前的處理時間,”remaining”表示預計剩餘時間,”rate_fmt”表示處理速度,”postfix”表示進度信息的後綴。

三、 tqdm的高級用法

除了基本用法,tqdm還提供了很多高級用法,例如子進程、文件讀寫、網絡傳輸等等。下面我們介紹幾種比較常用的場景:

1. 文件傳輸進度條

文件傳輸是比較常見的一個應用場景,本質上也是一種讀取操作。假設我們有一個100M大小的文件,想要在上傳或下載文件的過程中展示進度條。


from tqdm import tqdm
import requests

url = "http://test.com/test_file.zip"
res = requests.get(url, stream=True)

total_size = int(res.headers.get('content-length', 0)) # 獲取下載文件的總大小
chunk_size = 1024 # 每次傳輸的大小
bar = tqdm(total=total_size, unit='B', unit_scale=True) # 初始化進度條

with open('test_file.zip', 'wb') as f:
    for chunk in res.iter_content(chunk_size=chunk_size):
        if chunk: # filter out keep-alive new chunks
            f.write(chunk)
            bar.update(len(chunk))
bar.close()

以上代碼中,使用requests庫下載文件,同時使用iter_content來逐步寫文件,每寫一個chunk後就調用tqdm實例的update方法,告訴進度條已經寫了多少字節的數據。

2. 多進程並發進度條

在處理大量數據的時候,有時需要採用多進程並發的方式進行加速。比如我們需要對一個列表中的數值進行平方處理,直接使用for循環可能十分緩慢,同時需要處理大量數據,此時可以採用多進程的方式進行優化。同時在多個進程中顯示一個總體進度條,類似於以下效果:


100%|██████████| 100/100 [00:15<00:00,  6.39it/s]

實現代碼如下:


from tqdm import tqdm
import concurrent.futures

def doit(x):
    return x*x

def parallel_process(array, function, n_jobs=2):
    if n_jobs<=0:
        n_jobs = max(1, len(array)//(len(array)//n_jobs))

    with concurrent.futures.ProcessPoolExecutor(max_workers=n_jobs) as executor:
        results = list(tqdm(executor.map(function, array),
                            total=len(array),
                            desc=f"Multi-process computation",
                            unit="element",
                            ncols=90))
    return results

if __name__ == '__main__':
    array = list(range(100))
    result = parallel_process(array, doit)

以上代碼中,我們採用concurrent.futures庫中的map方法對列表array進行處理,同時使用ProcessPoolExecutor來開啟多進程,每個進程處理一個元素,最後返回處理結果。在使用tqdm來顯示總體進度條,同時設置ncols參數來控制展示的寬度。

四、 小結

本文介紹了tqdm的使用方法,從基礎用法到高級用法都進行了詳細的講解。在實際編程過程中,tqdm可以幫助程序員實現了解程序運行進度的同時,對優化代碼、提高效率、並發處理提供了簡潔而powerful的助力。希望本文能夠為讀者提供有益的信息和引導,幫助大家更好地掌握tqdm庫的使用方法。

原創文章,作者:ASVEQ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370155.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ASVEQ的頭像ASVEQ
上一篇 2025-04-18 13:40
下一篇 2025-04-18 13:40

相關推薦

  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演着非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • import turtle在Python中的用法用法介紹

    本文將從多個方面對import turtle在Python中的用法進行詳細的闡述,包括基礎操作、圖形繪製、顏色設置、圖形控制和turtle實例等,幫助讀者更好的了解和使用turtl…

    編程 2025-04-28
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常見的一個概念,是我們在編程中經常用到的一個變量類型。Python是一門強類型語言,即每個變量都有一個對應的類型,不能無限制地進行類型間轉換。在本篇…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Python合集符號全面解析

    Python是一門非常流行的編程語言,在其語法中有一些特殊的符號被稱作合集符號,這些符號在Python中起到非常重要的作用。本文將從多個方面對Python合集符號進行詳細闡述,幫助…

    編程 2025-04-28

發表回復

登錄後才能評論