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線程被喚醒,繼續執行。

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