线程同步除了使用线程锁之外,还可以使用事件信号Event类。为什么要使用事件信号呢?其实从生活中的例子就可以懂得这个道理,比如两个人一起煮饭。一个人洗锅,一个人洗米。如果先洗米的人干活比较快,或者说比较懒,只洗一次米,洗完的米就立即倒到锅里,而另外一个还没有把锅洗干净,这时会发生什么呢?不是给洗锅的人一顿骂,就是一顿打了。因为干净的米,放到不干净的锅,那么最后的结果还是不干净的,相当于白做了工作。所以在生活中,两个一起干活时,肯定会让先洗完米的人等一下,直到洗锅的人把锅刷干净,就不会发生这样的事情了。在多线程里,也往往会遇到相同的事情。比如电脑里有一台打印机,先打印了一份A文档,还没有打印完,又让打印了一份B文档,这时打印机会不会先去打印B文档呢,如果你仔细观察一下,它是不会的。为什么可以做到这样呢?其实这里就是事件信号进行同步的结果。因为打印机知道A文档没有打印完成,所以事件信号就不会通知B文档开始打印。
现在就来模拟打印的工作过程编写一个例子,在这里使用Event类来同步上面这种关系。通过threading.Event()可以创建一个事件管理标志,该标志(event)默认为False,event对象主要