Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果 Python 有一行:
print(message)
有没有办法让消息始终出现在标准输出中?
问题是可能有一些子进程或 C 扩展可以同时写入标准输出。
换句话说,如果我想要print()一些东西,如何保证它最终会在标准输出中与其他输出不交错?这甚至可能吗?我知道有,multiprocessing.Lock但这需要在每个print子进程或扩展中传递相同的锁,我不确定是否可以这样做......
print()
multiprocessing.Lock
print
在用于 Python 2 的 cPython 中,GIL(全局解释器锁)通常会为您解决这个问题。
对于子流程,您可以使用重定向的 stdout 启动它们并在您方便时报告 - 大多数库 C 扩展通常只会在出现严重问题时向 stdout 提供输出,因此不应该成为问题。
如果这是一个问题 - 在它出现之前我不会太担心 - 为什么不将所有打印功能替换为在需要时使用 Lock 的报告功能 - 您甚至可以用这样的类替换默认打印。