|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 兰竹皋 于 2020-11-15 23:15 编辑
- from multiprocessing.pool import ThreadPool
- import time
- def progress_bar(total, ncols=10, desc='Processing', unit='it'):
- def get_bar(l, n, ncol):
- r = ncol - l - 1
- bar = ''.join(['#' for i in range(l)])
- if l != ncol:
- bar += f'{n}'
- bar += ''.join([' ' for i in range(r)])
- return '|'+bar+'|'
- processing = f'{0:>3d}%'
- bar = get_bar(0, 0, ncols)
- mod = f'{desc}: {bar} {processing:>4s}'
- print('\r'+mod, end='')
- for i in range(total):
- start_time = time.time()
- # 内容处理
- time.sleep(0.1)
- stop_time = time.time()
- delta_time = stop_time - start_time
- temp = (i+1)/total
- processing = f'{int(temp*100):>3d}%'
- l = int(temp*ncols)
- n = int(temp*ncols*10)%10
- bar = get_bar(l, n, ncols)
- mod = f'{desc}: {bar} {processing:>4s} {1/delta_time:.2f}it/s'
- print('\r'+mod, end='')
- print('\n', end='')
- def main():
- print('main start')
- pool = ThreadPool(5)
- for i in range(5):
- pool.apply_async(progress_bar, (100,50))
- time.sleep(1)
- pool.close()
- pool.join()
- print('main over')
- main()
复制代码
读者好,代码如上,我想写个简单的类似tqdm的进度条展示程序。
但在多线程中,每个线程print的每一行都重复在一行中,如图(可能看不出来,但这一行中包括了5个线程):
请问,如何可以让他们分开来分别覆盖输出?类似:
光靠多线程多进程并不能实现多行异步刷新,要实现多行异步刷新,在windows上可能需要curses库,或者调用windows API。linux上同样可以使用curses库,或者借助终端控制码。
至于有没有现成的库可以帮助实现就不知道了。
|
|