确保每个打印在穿线时都在换行符上,无限期 python
Make sure each print is on a newline when threading, indefinitely in python
只是一个小问题。
我正在使用大约 6 个线程,所有线程都每隔几秒打印一次。
有时他们会像这样打印在同一行上:
OUTPUT
OUTPUT
OUTPUTOUTPUT
OUTPUT
OUTPUT
如您所见,这会留下一个空行和一个双打印。有什么办法可以确保这不会发生。我看到有人说:
print("OUTPUT", end="\n")
这没有用,所以我回到堆栈溢出!
管理此问题的一种方法是使用包装函数进行打印并使用 threading.Lock。这是一个例子:
from threading import Thread, Lock
import time
LOCK = Lock()
def doprint(msg):
with LOCK:
print(msg)
def athread():
doprint('Thread is starting')
time.sleep(0.1)
doprint('Thread is ending')
threads = []
for _ in range(10):
t = Thread(target=athread)
t.start()
threads.append(t)
for t in threads:
t.join()
这样,print() 只能被成功获取锁的线程调用
只是一个小问题。
我正在使用大约 6 个线程,所有线程都每隔几秒打印一次。 有时他们会像这样打印在同一行上:
OUTPUT
OUTPUT
OUTPUTOUTPUT
OUTPUT
OUTPUT
如您所见,这会留下一个空行和一个双打印。有什么办法可以确保这不会发生。我看到有人说:
print("OUTPUT", end="\n")
这没有用,所以我回到堆栈溢出!
管理此问题的一种方法是使用包装函数进行打印并使用 threading.Lock。这是一个例子:
from threading import Thread, Lock
import time
LOCK = Lock()
def doprint(msg):
with LOCK:
print(msg)
def athread():
doprint('Thread is starting')
time.sleep(0.1)
doprint('Thread is ending')
threads = []
for _ in range(10):
t = Thread(target=athread)
t.start()
threads.append(t)
for t in threads:
t.join()
这样,print() 只能被成功获取锁的线程调用