线程和多处理任务的进度条

atpbar的Python项目详细描述


pypi versionanaconda服务器徽章doi构建状态codecov

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月。

你可以在Jupyter笔记本上在线试用:binder



要求

  • 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秒 循环的迭代。循环的迭代次数为 从100010000之间随机选择

进度条将显示为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

由于i0开头,当i1234时,循环在其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 atpbar
0

使用进度条启动线程和进程的进度

atpbar可用于启动子线程或 也使用atpbar的子进程。

conda install -c conda-forge atpbar
1
conda install -c conda-forge atpbar
2

无论多个 多线程多进程中的atpbar实例启动 结束。上面示例中的进度条指示 四个线程中的循环已在主线程中的循环之前结束 线程结束;最后一个线程中的循环随后结束。


在Jupyter笔记本上

在jupyter笔记本上,atpbar显示基于 小部件

您可以尝试交互式联机: binder


非TTY设备

如果在Jupyter笔记本或TTY设备上都没有,则ATPBAR不是 能够显示进度条。ATPBAR偶尔打印状态。

conda install -c conda-forge atpbar
3

如何禁用进度条

函数disable()禁用ATPBAR;将不显示进度条。

conda install -c conda-forge atpbar
4

此函数需要在使用atpbarfind\u reporter()之前调用, 通常在程序开始时。


许可证

  • ATPBAR根据BSD许可证获得许可。

联系人

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何将图像写入文件–Java ImageIO   spring无法获取连接,数据源无效:“java.sql.SQLException:找不到适合数据源的驱动程序”   java错误,请在hs_err_pidXXX中输入信息。JVM崩溃时的日志文件   java任何人在resteasy中都会遇到不可用的根路径吗   java JPA元模型和实体类   java在jhipster应用程序上找不到symbol:class SparkReporter   java向前看下一个地图条目   java单个泛型参数同时接受两种不同的类型   java无法通过KAFKA api连接到EventHub   Java swing JPanel将数据从Textarea保存到字符串变量   java“downloadmavenplugin”可下载多个文件并重新定位输出目录   java单例类与静态方法和字段?   java多线程Spring事务   没有片段的java滑动菜单   java在swing中,是否可以在paintComponent()中找到JPanel的宽度和高度属性?   使用ProcessBuilder使用交互式IO运行java C程序   javajavax。imageio。IIOException:无法在Tomcat 9、OpenJDK 11和Geoserver中创建ImageInputStream   java对整数使用哈希集