我正在尝试跟踪以下代码中的进度:
from toolz import compose
calculator = compose(my_function, list, my_dict.get, tuple)
result = list(zip(*map(calculator, my_values)))
my_values
是一个长度为〜1mio的列表。我的第一次尝试是向my_function
添加一个计数器,当达到X的倍数(例如X==500
)时,该计数器会递增并打印出来。
有没有pythonic或更干净的方法来实现这一点,即没有向各种循环添加大量计数器? jupyter笔记本中的进度条也可以。
答案 0 :(得分:5)
如果Jupyter中的进度条可以使用,我喜欢使用tqdm
,因为它适用于任何可迭代的。以下是一些示例代码(由于我必须编写my_function
,my_values
等,因此您的示例略有简化):
def my_function(x):
yield x + 2
my_values = range(1000000)
result = list(zip(*map(my_function, my_values)))
现在只需在my_values
上添加tqdm(没有进度检查器/计数器堵塞你的代码!)以获得一个不错的进度条:
from tqdm import tqdm
def my_function(x):
yield x + 2
my_values = tqdm(range(1000000))
result = list(zip(*map(my_function, my_values)))
滚过令人敬畏的tqdm进度条:
100%|██████████| 1000000/1000000 [00:04<00:00, 210661.41it/s]
注意我与tqdm项目无关;我只是喜欢用它。 https://github.com/tqdm/tqdm
答案 1 :(得分:0)
在DataFrames中使用地图时,请使用tqdm.pandas(),然后代替map()并使用progress_map()和progress_apply()代替apply()