打印跳过换行
Print skipping newline
我根据看到的答案提出了一个问题。它使用线程池来管理线程,但每个线程打印 'Going to sleep... i'
,休眠 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_ITEM
和 PRINT_NEWLINE
字节码。
在多线程环境中使用 print
时,您最终可能会在这两个不同的步骤之间切换线程;线程 1、2 和 3 都可以先写入打印的消息,然后切换线程,只有在另一个线程写入它们的消息后才写入换行符。
通过在您的消息中添加 \n
,您可以确保同时写入换行符。在那种情况下,您确实正在向 sys.stdout
写入 两个 换行符。
我根据看到的答案提出了一个问题。它使用线程池来管理线程,但每个线程打印 'Going to sleep... i'
,休眠 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_ITEM
和 PRINT_NEWLINE
字节码。
在多线程环境中使用 print
时,您最终可能会在这两个不同的步骤之间切换线程;线程 1、2 和 3 都可以先写入打印的消息,然后切换线程,只有在另一个线程写入它们的消息后才写入换行符。
通过在您的消息中添加 \n
,您可以确保同时写入换行符。在那种情况下,您确实正在向 sys.stdout
写入 两个 换行符。