python的打印是否同步?

时间:2010-12-08 23:15:27

标签: python printing

python的打印是否同步? :)

线程之间。

4 个答案:

答案 0 :(得分:11)

Python的print isn't even vaguely thread safe。 (Bram Cohen的话,不是我的。)

答案 1 :(得分:2)

如果从多个线程调用print,输出可能会在调度程序的奇思妙想中交错。

答案 2 :(得分:1)

答案是否定的,线程可以互相中断。 但是,您可以使用锁来避免这种情况。

锁定阻止线程在全局事物上相互中断(特别是输出屏幕) 当一个线程想要使用带锁的全局事物时,它首先检查锁是否被解锁,如果没有等待直到它被锁定,之后锁定锁,做它想做的全局事情,最后释放锁。

但是,不要只使用标志变量,如果检查要实现这一点,则线程可以在if语句和锁定之间切换。 如果我没记错的话,Python会实现一个锁类。

另请注意,如果未正确使用锁定,则可能会遇到死锁或活锁。我现在没有太多时间,所以我无法在这里解释所有这些,但你可以谷歌了解更多信息,我还会检查我是否可以分享去年大学课程的演示文稿,他们解释说相当漂亮好在那里。

答案 3 :(得分:0)

各种解决方法...它不会同步打印,但是它是单片的,因此线程将不会相互写。

优点:不需要锁定,因此速度更快。

缺点:

  • 它不是同步的,因此不能保证事件将按发生的顺序打印。副作用是,如果出现异常,则该异常的文本可能会在最后几张打印出来之前开始。它们可能显示在异常文本之后或堆栈跟踪中间的某个位置。
  • 花费更多的时间和内存来运行循环。
/GenreType/array-node("GenreType Instance Record")/object-node()/TitleGenre[following-sibling::GenreSource="ABC"]