Python 多处理:更好的打印语句

问题描述 投票:0回答:1

假设我们有三个进程,我们希望使用 Python 的

multiprocessing
库并行运行。

所有三个进程都在运行 foo:


def foo(id):
    target = 100 * 1000
    for i in range(1, target):
        progress = round(i / target * 100, 2)
        print(f'foo{id} progress:{progress}%')

这是并行运行三个进程的代码

import multiprocessing
if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=3)
    pool.map(foo, [1,2,3])
    pool.close()
    pool.join()

运行此代码会在您的控制台中产生无用的乱码:

我们如何编写我们的打印语句来整齐地输出以下内容:

foo1 progress: 44.44%
foo2 progress: 44.43%
foo3 progress: 44.42%

这样...

  1. 控制台上始终不超过三行
  2. 百分比更新到位
python python-3.x parallel-processing stdout
1个回答
0
投票

关键是每次打印后要回到同一个位置

写完第一行后,可以使用

ESC
[
F
代码上一行。重复该字符串几次以上升不止一行。

每次你回到第一行的开头。

UP_ONE_LINE

# When writing a message for the top line:
print("progress ..."+UP_ONE_LINE)

# When writing a message for the second line:
print("\n"*1+"progress ..."+UP_ONE_LINE*2)

# When writing a message for the second line:
print("\n"*2+"progress ..."+UP_ONE_LINE*3)


根据我的经验,预先组装琴弦很重要

如果你只是使用这个模式:

print("")
print("")
print("progress",UP_ONE_LINE,UP_ONE_LINE,UP_ONE_LINE)

...不同的

print
s可能会交错,而不是一个过程的所有印刷品快速连续发生。

事实上,即使是单个打印中的各种逗号分隔项目也可能在进程之间交错。

所以最好每个进程组装一个串,然后送

print
ing。

© www.soinside.com 2019 - 2024. All rights reserved.