0

如果 Python 有一行:

print(message)

有没有办法让消息始终出现在标准输出中?

问题是可能有一些子进程或 C 扩展可以同时写入标准输出。

换句话说,如果我想要print()一些东西,如何保证它最终会在标准输出中与其他输出不交错?这甚至可能吗?我知道有,multiprocessing.Lock但这需要在每个print子进程或扩展中传递相同的锁,我不确定是否可以这样做......

4

1 回答 1

0

在用于 Python 2 的 cPython 中,GIL(全局解释器锁)通常会为您解决这个问题。

对于子流程,您可以使用重定向的 stdout 启动它们并在您方便时报告 - 大多数库 C 扩展通常只会在出现严重问题时向 stdout 提供输出,因此不应该成为问题。

如果这是一个问题 - 在它出现之前我不会太担心 - 为什么不将所有打印功能替换为在需要时使用 Lock 的报告功能 - 您甚至可以用这样的类替换默认打印。

于 2013-10-13T10:56:08.783 回答