python中的多线程实例教程

2019-10-05 21:30:49王冬梅

可用的函数如下

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程序设计有一定的借鉴价值。