国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現(xiàn)的生產(chǎn)者、消費者問題完整實例

2020-02-15 21:33:41
字體:
供稿:網(wǎng)友

本文實例講述了Python實現(xiàn)的生產(chǎn)者、消費者問題。分享給大家供大家參考,具體如下:

生產(chǎn)者、消費者問題,經(jīng)典的線程同步問題:假設(shè)有一個緩沖池(列表),生產(chǎn)者往里面放東西,消費者從里面取,規(guī)則是:列表為空的時候,生產(chǎn)者才能放東西;列表不為空的時候,消費者才能取東西;為了簡單起見,暫定緩沖池中最多只能有一個產(chǎn)品。這里生產(chǎn)者和消費者共同操作一個資源:緩沖池,因此每次操作的時候,需要給資源加鎖,操作結(jié)束時,釋放鎖,這樣才能做到資源同步。使用python實現(xiàn),需要繼承Thread類,獲取鎖對象,代碼如下:

# -*- coding:utf-8 -*-#! python2from threading import Threadfrom threading import Lockimport time,randompro_list = []lock = Lock()class Producer(Thread):  def run(self):    global pro_list    while True:      i = random.randint(0, 100)      lock.acquire()      if len(pro_list) > 0:        print "!--product still in list, wait consumer to get it.."      else:        pro_list.append(i)        print ":::Producer put:", pro_list[0]      lock.release()      time.sleep(2)class Consumer(Thread):  def run(self):    global pro_list    while True:      lock.acquire()      if len(pro_list) == 0:        print "!--No product now, wait producer put in..."      else:        print ":::Consumer fetch:", pro_list[0]        pro_list.pop(0)      lock.release()      time.sleep(2)Producer().start()Producer().start()Consumer().start()Producer().start()Producer().start()Consumer().start()Consumer().start()

這里使用多個生產(chǎn)者和消費者,共同操作緩沖池,部分執(zhí)行結(jié)果如下:

:::Producer put: 78
!--product still in list, wait consumer to get it..
:::Consumer fetch: 78
:::Producer put: 99
!--product still in list, wait consumer to get it..
:::Consumer fetch: 99
!--No product now, wait producer put in...
:::Producer put: 12
:::Consumer fetch: 12
:::Producer put: 91
!--product still in list, wait consumer to get it..
!--product still in list, wait consumer to get it..
:::Consumer fetch: 91
!--No product now, wait producer put in...
:::Producer put: 63
:::Consumer fetch: 63
:::Producer put: 85
!--product still in list, wait consumer to get it..
!--product still in list, wait consumer to get it..
:::Consumer fetch: 85
!--No product now, wait producer put in...
:::Producer put: 1
:::Consumer fetch: 1
:::Producer put: 26
!--product still in list, wait consumer to get it..
!--product still in list, wait consumer to get it..
:::Consumer fetch: 26
!--No product now, wait producer put in...
:::Producer put: 8
:::Consumer fetch: 8
:::Producer put: 19
!--product still in list, wait consumer to get it..
!--product still in list, wait consumer to get it..

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 济源市| 张掖市| 赤水市| 吉林省| 泰宁县| 彭水| 宜川县| 舟山市| 朝阳区| 阿城市| 交口县| 昂仁县| 深泽县| 织金县| 牡丹江市| 雅江县| 洮南市| 仁化县| 华阴市| 山东| 灯塔市| 许昌市| 武平县| 昌图县| 互助| 温泉县| 平凉市| 定陶县| 溧水县| 施秉县| 德清县| 洪雅县| 波密县| 都兰县| 清徐县| 瓮安县| 大宁县| 敦化市| 霸州市| 丹江口市| 嫩江县|