python并行编程(三)--线程同步

用信号量来进行线程同步。该示例来自于https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter2/08_Thread_synchronization_with_semaphores.html
代码:

# -*- coding:utf-8 -*-
# __author__ = majing
import random
import time

from threading import Thread, Semaphore

s = Semaphore(0)
item = 0


def consumer():
    print("consumer is waiting.")
    s.acquire()
    print("consumer acquire item : ", item)


def producer():
   print("producer begin.")
    global item
    time.sleep(3)
    item = random.randint(1, 1000)
    print("producer notify : produced item number %s" % item)
    s.release()

if __name__ == "__main__":
    t1 = Thread(target=producer)
    t2 = Thread(target=consumer)
    t1.start()
    t2.start()

    t1.join()
    t2.join()

运行结果:

producer begin.
consumer is waiting.
producer notify : produced item number 83
consumer acquire item :  83

由运行结果可以看出,producer线程先运行,但是调用了sleep函数,线程进入睡眠态,处理机调度consumer线程,调用s.acquire()之后,发现s的值小于0,consumer线程被挂起,继续运行producer,然后调用s.release()改变s的值,s的值大于等于0之后,consumer线程被唤醒,继续执行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章