【问题标题】:Python 2.7: Print thread safePython 2.7:打印线程安全
【发布时间】:2011-12-14 05:44:03
【问题描述】:

我看到过类似的帖子here,但它指的是 Python 2.6,我希望有更简单的方法。

从阅读线程看来,最好的方法是将我所有的打印语句替换为 sys.stdout.write(s + '\n') ?

我希望有更好的方法让我仍然可以使用打印

【问题讨论】:

    标签: python thread-safety


    【解决方案1】:
    from __future__ import print_function
    print = lambda x: sys.stdout.write("%s\n" % x)
    

    是一个不错的廉价和肮脏的黑客。

    【讨论】:

    • 太棒了。总是将它添加到 python 文件有什么缺点吗? (即为什么不总是有线程安全)
    • 它不处理print() keyword arguments。以及它使输出始终无缓冲。
    • 如我所说。它是一个廉价而肮脏的黑客。这不是“正确”的做法,但它可以完成工作。
    • 你也可以在 lambda 的末尾添加 sys.stdout.flush()
    • 是否在某处记录了 sys.stdout.write 是线程安全的?
    【解决方案2】:

    我发现以下在多线程和多进程环境下都有效,非常简单:

    def sprint(content):
        print("{0}~{1}\r".format(str(datetime.datetime.now()), content))
    

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2016-01-29
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多