2013-10-13 28 views
0

如果Python有一行:输出同步

print(message) 

有没有办法让总是出现在作为一个整体的标准输出的消息?

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

换句话说,如果我想print()如何保证它将以标准输出结束与其他输出非交错?这甚至有可能吗?我知道有multiprocessing.Lock,但这将需要通过每个print在子进程或扩展周围相同的锁,我不知道如果可能做的事情...

回答

0

在cPython for Python 2中,GIL,全局解释器锁,通常会为你照顾这个。

对于子流程,您可以使用stdout重定向并在您方便时报告 - 大多数库C扩展只会在出现严重问题时才会将输出标准输出到标准输出,因此不应成为问题。

如果它是一个问题 - 我不会太担心,直到它是 - 为什么不更换与使用锁的报告功能,您所有的打印功能如果需要的话 - 你甚至可以有这样一类替代默认的打印。

+0

不,它不会:http://docs.python.org/3/library/multiprocessing.html#synchronization-between-processes –

+0

我不会启动一个子进程,用户库可能会。另外,这不是Python 3特有的,请参阅:http://docs.python.org/2/library/multiprocessing.html#synchronization-between-processes –

+0

然后用锁打印到打印。如果您允许__user__库,并且需要确保您的输出不会被覆盖,那么在子进程中启动它们可能会更安全。 –