Python 2.7:线程安全的打印

7
我看到了一个类似的帖子(这里),但它是关于Python 2.6的,我希望有更简单的方法。
从阅读帖子中得知,最好的方法是用sys.stdout.write(s + '\n')替换所有的print语句?
我希望还有一种更好的方法可以继续使用print。
2个回答

13
from __future__ import print_function
print = lambda x: sys.stdout.write("%s\n" % x)

这是一个简单、便宜而且实用的方法。


真棒。总是将这个添加到Python文件中有什么缺点吗?(即为什么不总是具有线程安全性) - Setheron
它不处理print()关键字参数。并且它始终使输出无缓冲。 - Maxim Egorushkin
就像我之前所说的,这只是一种简陋且不太规范的解决方法。这并不是“正确”的做法,但它能达到预期效果。 - Jakob Bowyer
你也可以在 lambda 的末尾添加 sys.stdout.flush()。 - Michael Vain
sys.stdout.write 是否具有线程安全性在哪里有记录? - Ciro Santilli OurBigBook.com

0
我发现以下代码适用于多线程和多进程环境,非常简单:
def sprint(content):
    print("{0}~{1}\r".format(str(datetime.datetime.now()), content))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接