Python的print是同步的吗?
Python的打印功能是线程安全的吗? :)
在多个线程之间。
4 个回答
2
答案是否定的,线程之间是可以互相打断的。不过,你可以用锁来避免这种情况。
锁可以防止线程在处理一些全局资源(这里指的是输出屏幕)时互相打断。当一个线程想要使用这些全局资源时,它首先会检查锁是否是解锁状态。如果锁是锁住的,它就会等到锁被解开。然后,它会锁住这个锁,进行它想做的事情,最后再释放这个锁。
不过,不要仅仅用标志变量和条件判断来实现这个功能,因为线程可能会在条件判断和锁之间切换。Python有一个锁的类,如果我没记错的话,它叫做threading.lock。
另外,要注意,如果你不正确使用锁,可能会遇到死锁或者活锁的情况。我现在时间不多,不能详细解释这些,但你可以在网上搜索一下相关信息。我也会看看能不能分享我去年大学课程的讲义,里面对这些内容讲得很清楚。
4
如果你从多个线程同时调用 print
,那么输出的内容可能会混在一起,这完全取决于系统的调度程序怎么安排。
14
Python的打印功能根本就不安全。这句话是Bram Cohen说的,不是我说的。