【发布时间】:2017-05-19 02:34:04
【问题描述】:
我编写了一小段代码来测试并希望能够调试问题,而无需在 Python 中修改我的主小程序中的代码。这让我可以构建这段代码:
#!/usr/bin/env python
import sys, threading, time
def loop1():
count = 0
while True:
sys.stdout.write('\r thread 1: ' + str(count))
sys.stdout.flush()
count = count + 1
time.sleep(.3)
pass
pass
def loop2():
count = 0
print ""
while True:
sys.stdout.write('\r thread 2: ' + str(count))
sys.stdout.flush()
count = count + 2
time.sleep(.3)
pass
if __name__ == '__main__':
try:
th = threading.Thread(target=loop1)
th.start()
th1 = threading.Thread(target=loop2)
th1.start()
pass
except KeyboardInterrupt:
print ""
pass
pass
我对这段代码的目标是能够让这两个线程同时以 stdout 格式(带刷新)显示输出,然后并排显示。问题是我假设因为它正在刷新每个字符串,所以默认情况下它会刷新另一个字符串。如果可能的话,我不知道如何让它工作。
如果您只运行其中一个线程,它就可以正常工作。但是,我希望能够在终端输出中同时运行它们自己的字符串来运行两个线程。这是一张显示我得到的图片:
终端截图
如果您需要更多信息,请告诉我。提前致谢。
【问题讨论】:
-
打印到标准输出不是线程安全的。要么使用
logging模块,实现某种锁定,要么将打印移至另一个线程。 -
我使用 stdout 是因为我喜欢它如何显示(例如)一个数字,然后刷新它并在旧位置打印一个新数字。因此,为输出创建一个固定点,而不是让它为每个数字创建一个新行来打印它。
标签: python multithreading stdout