Pycharm输出在使用线程时相加



我正在学习Threads,所以我用优美的文本制作了一个简单的程序。

import time
from threading import Thread

def func():
for a in range(1, 101):
print(a)

Threads = []
for i in range(25):
t = Thread(target=func)
Threads.append(t)
for i in Threads:
i.start()
for i in Threads:
i.join()

但几分钟后,我开始对自动完成的糟糕质量感到恼火。所以我切换到Pycharm Edu,输出出现了一些奇怪的事情。在cmd中,它就像这个

60
60
97
68
58
59
70
71
74
95
89
68
53
92
91
92
93
99
100
89
96

Pycharm的输出是

6545
46
47
54
76
775981
66

6555
55
608264
67
48

我不明白发生了什么事。

print实际上是对stdout的两个不同的写入:文本,然后是换行符。所以print(a)是这样的:

sys.stdout.write(str(a))
sys.stdout.write('n')

如果现在多个线程同时写入,则类似于以下内容:

sys.stdout.write(str(a))
sys.stdout.write('n')
sys.stdout.write(str(a))
sys.stdout.write('n')

或者,有时:

sys.stdout.write(str(a))
sys.stdout.write(str(a))
sys.stdout.write('n')
sys.stdout.write('n')

所以你在一行上得到两个数字,然后是两个换行符。

最简单的修复方法是连接字符串&使用打印前的换行符:


def func():
for a in range(1, 101):
print(f'{a}n', end='')

这将产生正确的结果。

(至于为什么CMD没有发生这种情况:可能只是运气(

最新更新