可用的函数如下
threading.Condition([lock]) 分配一个条件变量
acquire(*args) 条件变量上锁
release() 条件变量解锁
wait([timeout]) 等待唤醒,timeout表示超时
notify(n=1) 唤醒最大n个等待的线程
notifyAll()、notify_all() 唤醒所有等待的线程
下面这个例子使用条件变量来控制两个线程交替运行
num = 0
def threadFunction(arg):
global num
while num < 10:
cond.acquire()
while num % 2 != arg:
cond.wait()
print 'Thread %d - %d' %(arg, num)
num += 1
cond.notify()
cond.release()
if __name__ == '__main__':
cond = threading.Condition()
threading.Thread(target = threadFunction, args=(0,)).start();
threading.Thread(target = threadFunction, args=(1,)).start();
输出如下
Thread 0 - 0 Thread 1 - 1 Thread 0 - 2 Thread 1 - 3 Thread 0 - 4 Thread 1 - 5 Thread 0 - 6 Thread 1 - 7 Thread 0 - 8 Thread 1 - 9 Thread 0 - 10
其实上面这个程序是有问题的,我们想打印的是0~9,但实际上10也被打印了出来,原因很简单,因为两个线程交替打印,使得num在一个线程中可能加2,从而导致10被打印出来,所以必须在打印前再次check。
相信本文所述对大家的Python程序设计有一定的借鉴价值。










