线程和多处理任务的进度条
atpbar的Python项目详细描述
ATPBAR
终端上线程和多处理任务的进度条。 还有Jupyter笔记本。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
atpbar可以同时显示多个进度条 显示循环迭代的进度 线程化或 多处理 任务。atpbar可以在终端和jupyter上显示进度条。 笔记本。ATPBAR可与 曼蒂科拉
ATPBAR于2015年开始开发,作为 alphatwirl。自动变速箱 阻止物理学家终止他们正在运行的分析代码, 通过显示进度条,这将需要很多小时才能完成 表明他们的代码正在运行。进度条有 为物理学家节省了数不清的时间。atpbar是 副包装 进度条 直到它成为一个独立的包,名字是 ATPBAR,2019年2月。
要求
- python 2.7、3.6或3.7
安装
您可以使用conda forge中的conda安装:
conda install -c conda-forge atpbar
或使用pip
:
pip install -U atpbar
用户指南
快速启动
我将在这里通过简单的例子演示如何使用atpbar。
导入库
为了在示例中创建简单的循环,我们使用两个python标准
库,时间和
随机。导入
两个软件包以及atpbar
importtime,randomfromatpbarimportatpbar
注意:从包中导入对象atpbar
而不是
而不是导入包atpbar
本身。
一个回路
对象atpbar
是一个iterable,它可以包装另一个iterable和
显示迭代的进度条。(使
接口iterable的灵感来自
tqdm)
n=random.randint(1000,10000)foriinatpbar(range(n)):time.sleep(0.0001)
上面代码中的任务是睡眠时间0.0001
秒
循环的迭代。循环的迭代次数为
从1000
和10000
之间随机选择
进度条将显示为atpbar
51.25% :::::::::::::::::::: | 4132 / 8062 |: range(0, 8062)
为了让atpbar
显示进度条,包装的iterable
需要有一个长度。如果无法通过len()
获得长度,
atpbar
不会显示进度条。
嵌套循环
atpbar
可以显示嵌套循环的进度条,如下所示
例子:
foriinatpbar(range(4),name='outer'):n=random.randint(1000,10000)forjinatpbar(range(n),name='inner {}'.format(i)):time.sleep(0.0001)
外循环迭代4次。内部循环与循环类似
在前面的例子中---睡眠时间0.0001
秒。你可以
可选地提供关键字参数name
以指定
进度条。
100.00% :::::::::::::::::::::::::::::::::::::::: | 3287 / 3287 |: inner 0
100.00% :::::::::::::::::::::::::::::::::::::::: | 5850 / 5850 |: inner 1
50.00% :::::::::::::::::::: | 2 / 4 |: outer
34.42% ::::::::::::: | 1559 / 4529 |: inner 2
在上面进度条的快照中,外部循环位于 第三次迭代。内部循环已完成两次,正在运行 第三。已完成任务的进度条将上移。进展 活动任务的条形图在底部增长。
螺纹
atpbar
可以同时显示循环的多个进度条
在不同的线程中迭代。
下面代码中的函数run_with_threading()显示 例子:
fromatpbarimportflushimportthreadingdefrun_with_threading():nthreads=5deftask(n,name):foriinatpbar(range(n),name=name):time.sleep(0.0001)threads=[]foriinrange(nthreads):name='thread {}'.format(i)n=random.randint(5,100000)t=threading.Thread(target=task,args=(n,name))t.start()threads.append(t)fortinthreads:t.join()flush()run_with_threading()
睡眠时间0.0001
秒的任务定义为
任务
。任务
与线程
同时运行5次。
atpbar
可用于任何线程。成长中的五个进度条
同时显示。当
进度条已完成更新。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
0
任务完成后,任务的进度条将上移。这个 活动任务的进度条位于底部。
多处理
atpbar
可以与多处理一起使用
下面代码中的函数run_with_multiprocessing()显示 一个例子。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
1
它用多处理
启动子流程中的四个worker钕铁氧体
他们执行十项任务。
为了在子流程中使用atpbar
,可以使用
在主进程中由函数find_reporter()
找到,需要
被带到子流程并由函数在那里注册
注册报告器()
同时将显示增长的进度条。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
2
带曼蒂科拉
mantichora提供 多处理的简单接口
使用mantichora,task()
可以与多处理同时运行
使用以下示例中的简单代码:
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
3
ATPBAR
可用于任务功能。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
4
功能
a中断
和异常
当循环以中断或异常结束时,进度条停止
最后一次完整的迭代。
例如,以下代码中的循环在1235次迭代期间中断。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
5
由于i
以0
开头,当i
是1234
时,循环在其1235中
迭代。最后一次完整的迭代是1234。进度条在1234停止。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
6
作为异常的一个例子,在下面的代码中,异常是 在1235次迭代中抛出。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
7
进度条在最后一个完整的迭代1234停止。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
8
此功能在嵌套循环、线程和 多处理。例如,在下面的代码中,五个 第1235次迭代时线程中断。
100.00% :::::::::::::::::::::::::::::::::::::::: | 7811 / 7811 |: task 1
100.00% :::::::::::::::::::::::::::::::::::::::: | 23258 / 23258 |: task 0
65.62% :::::::::::::::::::::::::: | 8018 / 12219 |: task 4
60.89% :::::::::::::::::::::::: | 31083 / 51048 |: task 2
25.03% :::::::::: | 23884 / 95421 |: task 3
9
所有进度条在1234停止。
conda install -c conda-forge atpbar0
使用进度条启动线程和进程的进度
atpbar
可用于启动子线程或
也使用atpbar
的子进程。
conda install -c conda-forge atpbar1
conda install -c conda-forge atpbar2
无论多个
多线程多进程中的atpbar
实例启动
结束。上面示例中的进度条指示
四个线程中的循环已在主线程中的循环之前结束
线程结束;最后一个线程中的循环随后结束。