如果我们碰到了这样的场景:线程1做一件时间较长的事情,等做完了,主程序去测试其状态是不是真的更改了。
通常比较容易想到的是:
1. 线程1里,用大循环来模拟这个长时间的函数,比如for i in range(1, 10000)等等;
2. 主程序里,用比如time.sleep(60)去等待,默许60秒应该已经够线程1去run了。
显然,这样做是不严谨的,因为没办法确切控制线程1的时间,所以测试程序可能会fail掉。
好的解决办法是用threading.Event的wait()和set()来精确控制线程。
见代码如下:
线程1:Work
主线程:跟踪测试is_done的状态。
运行顺序见print的编号
以上代码,细细体会吧,呵呵。