1
我有一個包含打印語句的小型多線程程序。 如果我沒有將end
更改爲除\n
之外的其他字符,它可以很好地工作。 如果我想使用其他字符而不是\n
,我需要將flush
設置爲True
。在Python中,沖洗如何工作,原因是什麼?
所以我的問題是如何沖洗的作品,是什麼原因?
#!/usr/bin/env python -u
# -*- coding: utf-8 -*-
from threading import Thread
from queue import Queue
from time import sleep
def do_stuff(task):
while not task.empty():
sleep(1)
print(task.get()) # works well
# print(task.get(), end='\n') # works well
# print(task.get(), end=',', flush=True) # works well
# print(task.get(), end=',') # works badly
task.task_done()
q = Queue(maxsize=0)
for x in range(0, 5):
q.put(x)
num_threads = 2
for i in range(num_threads):
worker = Thread(target=do_stuff, args=(q,))
worker.setDaemon(True)
worker.start()
q.join()
你的答案有點Py2爲中心,而OP的代碼是Py3。 – BrianO
@BrianO aaah我錯過了這一點。那麼參數是一樣的,只有函數調用是不同的..讓我更新答案 –
換句話說,任何時候end等於除了新行之外的任何東西,我們應該使用flush = True? –