html video顯示進度條_使用 tqdm 在 Python 應用中顯示進度 | Linux 中國

860b162e4df481de3daff507ab4c86f4.png
如果你的程序需要一段時間才能顯示結果,可通過顯示它的進度來避免讓用戶感到沮喪。
  • 來源:https://linux.cn/article-12990-1.html
  • 作者:Moshe Zadka
  • 譯者:geekpi

(本文字數:3093,閱讀時長大約:3 分鐘)

阿拉米語,希伯來語和阿拉伯語中的閃米特語根 q-d-m 通常與前進或進度有關。阿拉伯語 taqaddum ( )的意思是“進度”。進度是很重要的。正如每部感覺良好的電影都會告訴你,旅程和目的地同樣重要。

大多數程序都有一個明確的目標,一個期望的最終狀態。有時,計算這個最終狀態可能需要很長的時間。雖然計算機沒有感情不在乎,但人卻在乎。人類并不樂意坐在原地等待,而看不到任何明顯的進展跡象。疑問不斷蔓延。程序崩潰了嗎?磁盤性能是否抖動?操作系統是否把所有的計算資源都分配給了其他任務?

就像正義一樣,進度必須被看到,而不僅僅是完成。Python 庫 tqdm 有助于使進度變得明確。

tqdm 模塊可在控制臺下工作,但它也專門支持了我最喜歡的環境之一 Jupyter。要在 Jupyter 中使用 tqdm,你需要導入 notebook 子模塊并安裝 ipywidgets。notebook 子模塊與 tqdm 接口兼容。

這意味著你可以做一些導入時操作來導入正確的模塊,同時保持 tqdm 的用法不變。訣竅是檢查 __main__ 模塊是否具有全局變量 get_ipython。雖然這只是一個啟發式的方法,但卻是一個相當準確的方法:

import sys
if hasattr(sys.modules["__main__"], "get_ipython"):from tqdm import notebook as tqdm
else:import tqdm

最簡單的情況是,某件事情需要運行一定的迭代次數(事先已知),而每一次迭代的時間都差不多。例如,有一個計算任何數字的平方根的算法,通過從 1 作為猜測值開始,然后計算出一個改進后的猜測值:

def improve_guess(rt, n):return (rt + n/rt) / 2

一點點的改進可以讓你更加接近該平方根。例如,你可以計算 2 的平方根:

guess = 1
target = 2
for i in tqdm.trange(10):guess = improve_guess(guess, target)

2e2328c05dbc064a9f20033e69272aa0.png
tqdm output

精確了到小數點后 10 位!

round(2 - guess*guess, 10)
0.0

一個稍微復雜一點的例子是,當元素的數量是已知的,而處理每個元素需要類似的時間。例如,你可以計算一些數字的乘積。為此,你需要一些隨機數:

import random
numbers = [random.uniform(0, 2.8) for i in range(100)]
numbers[:5]
[2.6575636572230916,
0.1286674965830302,
1.0634250104041332,
1.1760969844376505,
0.45192978568125486]

現在有了這些數字,可以將它們相乘了。使用 tqdm 最簡單的方法是包裝一個 Python 迭代函數。數值是一樣的,但是 tqdm 會顯示一個進度條:

result = 1
for num in tqdm.tqdm(numbers):result *= num
result
2.4081854901728303

1ca26bdc966474b1d70f5b0ce5898cbd.png
tqdm output

然而,并不是所有的事情都可以預測。最不容易預測的事情之一就是網絡速度。當你下載一個大文件時,衡量進度的唯一方法就是檢查已經下載了多少:

url = "https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz"
import httpx
with httpx.stream("GET", url) as response:total = int(response.headers["Content-Length"])with tqdm.tqdm(total=total) as progress:for chunk in response.iter_bytes():progress.update(len(chunk))

6b6d1f7fcd25eb314f36cc2acd1977ad.png
tqdm output

有時,“嵌套”進度條是有意義的。例如,如果你要下載一個目錄,你就需要一個進度條來跟蹤文件,并為每個文件設置一個進度條。

下面是一個例子(但沒有實際下載一個目錄):

files = [f"vid-{i}.mp4" for i in range(4)]
for fname in tqdm.tqdm(files, desc="files"):total = random.randrange(10**9, 2 * 10**9)with tqdm.tqdm(total=total, desc=fname) as progress:current = 0while current < total:chunk_size = min(random.randrange(10**3, 10**5), total - current)current += chunk_sizeif random.uniform(0, 1) < 0.01:time.sleep(0.1)progress.update(chunk_size)

2b48283b800bf1220a772733cad78e16.png
tqdm output

所以,如果你的程序需要一段時間才能顯示最終結果,為避免讓你的用戶感到沮喪。請顯示它的進度!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529558.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529558.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529558.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

課題開題報告范文樣本_成都汽車職業技術學校舉行 2020年省、市、區課題開題報告會...

01為深入貫徹落實國務院、省、市、區關于深化教育教學改革的重要精神,充分發揮教育科研的先導作用,明晰課題研究的思路并提高課題研究的針對性,1月12日,成都汽車職業技術學校舉行2020年省、市、區課題開題報告會。本次開題報告會邀…

vsftp日志查看_vsftp日志xferlog格式分析(示例代碼)

1、開始vsftp記錄日志。修改/etc/vsftpd/vsftpd.conf 如下:xferlog_enableYESxferlog_std_formatYESxferlog_file/var/log/xferlogFTP服務器的日志設置,可以通過修改主配置文件/etc/vsftpd.conf實現。主配置文件中與日志設置有關的選項包括xferlog_enabl…

安裝mysql5 1步驟_Linux系統安裝MySQL詳細步驟(mysql-5.1等)

第一步、查找以前是否安裝有mysql使用下面命令:rpm -qa|grep -i mysql如果顯示有包則說明已安裝mysql第二步、如果已安裝,則需要刪除已安裝的數據庫可按以下步驟刪除數據庫:刪除包命令:rpm -e --nodeps 【包名】rpm -e --nodeps …

mysql分頁查詢關鍵_MySQL優化教程之超大分頁查詢

背景基本上只要是做后臺開發,都會接觸到分頁這個需求或者功能吧。基本上大家都是會用MySQL的LIMIT來處理,而且我現在負責的項目也是這樣寫的。但是一旦數據量起來了,其實LIMIT的效率會極其的低,這一篇文章就來講一下LIMIT子句優化…

mysql r_R之RMySQL

linux,mysql和R的版本信息:Linux naci 3.19.0-16-generic #16-Ubuntu SMPServer version: 5.6.24-0ubuntu2 (Ubuntu)R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet"mysql的linux安裝,參照上一篇關于liunx下安裝mysql的文章。1.…

mysql 字符轉換函數是_MySQL日期和字符串轉換函數

Mysql中to_char()和str_to_date()函數轉載路徑:https://blog.csdn.net/ricardo_mli/article/details/802175121.字符串轉換成日期格式str_to_date(date,’%Y-%m-%d’)----->相當于Oracle中的to_char();例子:INSERT INTOt_order(order_time)VALUES(str…

mysql數據加百分號_使用MySQL SELECT語句時,在每個值的末尾添加一個百分號(%)...

要在末尾添加百分號,請使用CONCAT()函數。讓我們首先創建一個表-mysql> create table DemoTable(StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,StudentName varchar(100),StudentScore int);使用插入命令在表中插入一些記錄-mysql> insert into DemoTa…

mysql 分頁 jdbc_JDBC調用MySQL分頁存儲過程實現(一)

DROP PROCEDURE IF EXISTS pro_pager;CREATE DEFINER root% PROCEDURE pro_pager(in p_pageNo int, /*當前頁*/in p_perPageCnt int, /*每頁記錄數*/in p_sql VARCHAR(2000), /*查詢sql語句*/out v_totalRowsCnt int, /*記錄總條數*/out v_totalPageCnt int) /*記錄總頁數*/BE…

mariadb mysql表_mysql/mariadb學習記錄——創建刪除數據庫、表的基本命令

查看已有的數據庫:mysql>show databases;--------------------| Database |--------------------| information_schema || test |--------------------2 rows in set (0.05 sec)新建數據庫語句:mysql>create database wzu;Query OK,1 row affected (0.05sec)m…

zabbix proxy mysql_zabbix proxy 配置

在監控大量服務器時,如果將所有的請求都發送到一個zabbix server上,將會對我們的zabbix server造成很大的壓力,我們在規劃多個區域或機房進行監控的時候,會考慮到使用zabbix proxy 來代理zabbix server 的部分功能。zabbix server…

mysql修改數據庫結構用哪一項_mysql alter修改數據庫表結構用法

1.alter操作表字段(1)增加字段alter table 表名 add 字段名 字段類型;alter table student add name varchar(10);(2)修改字段alter table 表名 change 舊字段名 新字段名 字段類型;alter table 表名 modify 字段名 字段類型;//修…

mvc mysql linq_MVC3+Linq to sql 顯示數據庫中數據表的數據

1:首先創建asp.net mvc3應用程序 2:創建項目完成后 找到controllers文件鼠標右擊選擇添加控制器 3 為models文件夾添加一個linq to sql類文件,然后把數據庫中的數據庫復制進來。如截圖操作 4:添加控制器好后會生成一個HomeControl…

bash給腳本加進度條_shell腳本實現多彩進度條

代碼如下:1 #!/bin/bash2 i0;3 str""4 arr("|" "/" "-" "\\")5 while [ $i -le 100 ]6 do7 let indexi%48 let indexcolori%89 let color30indexcolor10 printf "\e[0;$color;1m[%-100s][%d%%]%c\r" &…

koa mysql mongodb_koa 操作MongoDB數據庫

安裝安裝MongoDBnpm install mongodb --save引入中間件引入mongodb下面的連接模塊MongoClient// 引入MongoDB 連接模塊const MongoClient MongoDB.MongoClient;配置中間件定義數據庫連接的地址以及配置數據庫的名稱let url "mongodb://localhost:27017/";let dbNam…

mysql 64位 安裝1045_MySql?安裝時的1045錯誤

MySql 安裝到最后一步遇到1045錯誤Access denied for user rootlocalhost (usingpassword:YES)解決方案一:卸載MySQL,重新安裝1, 卸載MySQL2, 刪除目錄 C:\Documents and Settings\All Users\ApplicationData\MySQL,還要刪除MySQL安裝目錄3, 重新安裝MyS…

mysql工作表格制作教程_Access制作復雜報表

何制作復雜報表利用excel輸出復雜報表 在讀這篇文章以前首先要提醒大家,Access 本身的報表也具有很強的實用性和強大的功能,只有當你發掘了其本身全部的功能卻仍不能滿足你對報表的特殊要求時才請使用 Excel 輸出報表。很明顯,使用 Excel 輸出…

php+mysql投票代碼_PHP+jQuery+MySql實現紅藍投票功能

本文是一篇綜合知識應用類文章,需要您具備PHP、jQuery、MySQL以及html和css方面的基本知識。本文在《PHPMySqljQuery實現的“頂”和“踩”投票功能》一文基礎上做了適當改進,共用了數據表,您可以先點擊了解這篇文章。HTML我們需要在頁面中展示…

numpy 最大值_第 85 天:NumPy 統計函數

數學統計在我們的程序當中特別是數據分析當中是必不可少的一部分,本文就來介紹一下 NumPy 常見的統計函數。最大值與最小值numpy.amin()用于計算數組中的元素沿指定軸的最小值。可以通過 axis 參數傳入坐標軸來指定統計的軸,當指定 axis 時,a…

java中如何實現變量可配置_Java基礎-如何配置環境變量

Java環境變量詳細教程第一步、打開電腦環境變量設置窗口以Win10系統為例子。在桌面找到此電腦,右鍵此電腦— —>屬性,點擊屬性— —>點擊左側高級系統設置點擊高級系統設置點擊環境變量第二步、新建JAVA_HOME點擊系統變量中的新建,出現輸入框&…

python三引號解析_[宜配屋]聽圖閣

和C語言一樣,引號屬于特殊功能字符,不能夠像普通字符那樣直接通過print打印,需要進行一些處理,比如說反斜杠轉義等。這里介紹幾種打印三引號的方法,希望對需要的朋友有用。1、第一中方法比較簡單,直接使用三…