gpt4 book ai didi

python - 打印跳过换行

转载 作者:行者123 更新时间:2023-12-03 12:55:25 28 4
gpt4 key购买 nike

我根据看到的答案提出了一个问题。它使用线程池来管理线程,但每个线程打印'Going to sleep... i', sleep i时间然后打印'Slept.. '。我的问题是为什么它打印 'Going to sleep...Going to sleep...Going to sleep...'?它不会在换行符上打印它们,除非我明确地将 \n 添加到字符串的末尾。这是我没有 \n 的输出。`

Going to sleep...Going to sleep...Going to sleep...


Slept ..0
Going to sleep...
Slept ..1
Going to sleep...
Slept ..2
Slept ..3
Slept ..4
done!!`

这是我换行的输出

Going to sleep...
Going to sleep...
Going to sleep...



Slept ..0
Going to sleep...

Slept ..1
Going to sleep...

Slept ..2
Slept ..3
Slept ..4
done!!

Going to sleep... 和第一个 Slept.. 之间的空格对我来说也很奇怪。

这是代码

import time
from multiprocessing.dummy import Pool

def run(i):
print "Going to sleep...\n"
time.sleep(i)
print ("Slept .." + str(i))

p = Pool(3)

res = [p.apply_async(run, (i,)) for i in range(5)]

p.close()
p.join()

print "done!!"

最佳答案

print 语句首先将您的文本写入 sys.stdout,一旦写入,一个单独的字节码将处理写入 \n换行符:

>>> import dis
>>> dis.dis(compile('print "Hello world!"', '<demo>', 'exec'))
1 0 LOAD_CONST 0 ('Hello world!')
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 1 (None)
8 RETURN_VALUE

请注意反汇编中单独的 PRINT_ITEMPRINT_NEWLINE 字节码。

在多线程环境中使用 print 时,您最终可能会在这两个不同的步骤之间切换线程;线程 1、2 和 3 都可以先写入打印的消息,然后切换线程,只有在另一个线程写入消息后才写入换行符。

通过将 \n 添加到您的消息中,您可以确保同时写入换行符。在这种情况下,您实际上是在向sys.stdout 写入两个 换行符。

关于python - 打印跳过换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com