鱼C论坛

 找回密码
 立即注册
查看: 2231|回复: 2

[已解决]求助,关于多线程print问题。。。

[复制链接]
发表于 2020-11-15 22:52:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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个线程):
1.png
请问,如何可以让他们分开来分别覆盖输出?类似:
2.png
最佳答案
2020-11-16 00:40:03
光靠多线程多进程并不能实现多行异步刷新,要实现多行异步刷新,在windows上可能需要curses库,或者调用windows API。linux上同样可以使用curses库,或者借助终端控制码。
至于有没有现成的库可以帮助实现就不知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-16 00:40:03 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
光靠多线程多进程并不能实现多行异步刷新,要实现多行异步刷新,在windows上可能需要curses库,或者调用windows API。linux上同样可以使用curses库,或者借助终端控制码。
至于有没有现成的库可以帮助实现就不知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-16 11:14:48 | 显示全部楼层
hrp 发表于 2020-11-16 00:40
光靠多线程多进程并不能实现多行异步刷新,要实现多行异步刷新,在windows上可能需要curses库,或者调用win ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 17:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表