求助,关于多线程print问题。。。
本帖最后由 兰竹皋 于 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库,或者借助终端控制码。
至于有没有现成的库可以帮助实现就不知道了。 hrp 发表于 2020-11-16 00:40
光靠多线程多进程并不能实现多行异步刷新,要实现多行异步刷新,在windows上可能需要curses库,或者调用win ...
谢谢
页:
[1]