| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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库,或者借助终端控制码。 
至于有没有现成的库可以帮助实现就不知道了。 
 
 
 |   
 
 
 
 |