最近一个项目需要处理巨量的数据,为了加快处理速度,用上了python的多进程,将数据分成多批,分别传入多个进程进行处理,而在每个子进程里,循环处理传进的数据中的每一条,为了看到处理进度,就想到用tqdm模块来显示进度条,但是在实现的过程中,发现如果每个子进程都建立一个tqdm进度条的话,进程间的进度条会相互覆盖,达不到同时显示的效果,即使用上position参数,进度条也会在不同的位置上跳来跳去,我想让每一个子进程都在命令窗口中独立显示一个单独的进度条?有没有好的实现方法。
可以,用你的当前任务的百分比除以总数,然后更新进度条
参考GPT和自己的思路:
对于您的问题,可以考虑使用多线程(而不是多进程)来实现每个子进程的不同的进度条。具体来说,可以在每个子进程内部,使用一个新的线程来显示进度条,而不是在主进程中完成显示。
具体实现如下:
1.在每个子进程内部,创建一个新的线程来进行循环处理数据,并显示进度条。
2.在新线程中使用tqdm模块来显示进度条,但是不要将tqdm的输出重定向到sys.stdout(默认输出到标准输出,即命令行窗口),而是将其输出到一个独立的文本文件。
3.在主进程中,开辟一个新的线程来监测所有子进程的进度条。该线程从每个子进程的输出文本中读取进度条的进度信息,并在命令行窗口中显示所有子进程的进度条信息。
需要注意的是,由于多线程的并发执行,可能会存在某个子进程的进度条信息先于其他子进程的信息显示出来的情况,但这并不影响整体的进度显示效果。