亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python模擬簡單電梯調(diào)度算法示例

 更新時間:2018年08月20日 14:27:12   作者:zzulp  
這篇文章主要介紹了Python模擬簡單電梯調(diào)度算法,涉及Python線程、隊列、時間延遲等相關操作技巧,需要的朋友可以參考下

本文實例講述了Python模擬簡單電梯調(diào)度算法。分享給大家供大家參考,具體如下:

經(jīng)常在公司坐電梯,由于樓層較高,是雙聯(lián)裝的電梯,但是經(jīng)常等電梯很久,經(jīng)常有人罵寫電梯調(diào)度算法的?;貋黹e來無事,自己嘗試寫了一個簡單的。

場景很簡單,每一層電梯口只有一個按鈕,不區(qū)分上下,當有人按下這個鍵后,電梯會過來停在此層,這個人可以進去,并選擇自己想去的層。電梯的調(diào)度策略也很簡單,在一次向上的過程中,如果有人在下面按了鍵,電梯并不直接向下,而是運行到此次向上的最頂層,然后再下次向下運行的過程中去服務這個請求。

elevator.py

import time
from myque import myque
class elevator:
  def __init__(self,layers):
    self.building_layers = layers
    self.direction = 'up'
    self.cur_layer = 1
    self.up_queue = myque()
    self.down_queue = myque(True)
    self.switcher = 'open'
  def stop(self):
    self.switcher='stop'
  def push_button(self,layer,direction=None):
    if self.cur_layer>layer:
      self.down_queue.insert(layer)
    elif self.cur_layer<layer:
      self.up_queue.insert(layer)
    else:
      if self.direction=='up':
        self.down_queue.insert(layer)
      else:
        self.up_queue.insert(layer)
  def handle_queue(self,direction):
    self.direction = direction
    if direction == 'up':
      inc = 1
    else:
      inc = -1
    que = getattr(self , direction + '_queue')
    while que.length():
      while self.cur_layer != que.front():
        print '/nelevator in ',self.cur_layer
        time.sleep(1)
        self.cur_layer += inc
      print '/nelevator arrives at ',self.cur_layer
      que.pop_front()
  def run(self):
    while self.switcher=='open':
      if self.up_queue.empty() and self.down_queue.empty():
        """elevator now is waiting, stop at a layer"""
        time.sleep(1)
        continue
      """go up"""
      self.handle_queue('up')
      """go down"""
      self.handle_queue('down')

myque.py

import threading
class myque:
  def __init__(self,reverse=False):
    self.mode = reverse
    self.buf = []
    self.lock = threading.Lock()
  def insert(self,object):
    self.lock.acquire()
    self.buf.append(object)
    self.buf.sort(reverse = self.mode)
    self.lock.release()
  def front(self):
    return self.buf[0]
  def pop_front(self):
    self.lock.acquire()
    self.buf.pop(0)
    self.lock.release()
  def length(self):
    self.lock.acquire()
    size = len(self.buf)
    self.lock.release()
    return size
  def empty(self):
    self.lock.acquire()
    size = len(self.buf)
    self.lock.release()
    return size==0

deploy.py

import threading
from elevator import elevator
def init_elevator(building_layers):
  e = elevator(building_layers)
  t = threading.Thread(target = e.run)
  t.setDaemon(True)
  t.start()
  return (e,t)
def main():
  myelevator,ctl_thread = init_elevator(17)
  while True:
    str=raw_input("Input valid layer :")
    try:
      layer = int(str)
    except Exception:
      if str=='quit':
        myelevator.stop()
        ctl_thread.join()
        break
      else:
        print 'invalid input',str
        continue
    if layer not in range(1,myelevator.building_layers+1):
      continue
    myelevator.push_button(layer)
if __name__=='__main__':
  main()

運行結(jié)果如下:

如果擴展的話,很容易將各層的按鈕擴展為帶上下指示的。如果有機會可以擴展為多聯(lián)裝電梯,并將調(diào)度算法做的更加智能,可以根據(jù)歷史數(shù)據(jù)和時間進行動態(tài)調(diào)整。

更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構與算法教程》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • keras的siamese(孿生網(wǎng)絡)實現(xiàn)案例

    keras的siamese(孿生網(wǎng)絡)實現(xiàn)案例

    這篇文章主要介紹了keras的siamese(孿生網(wǎng)絡)實現(xiàn)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 關于Python3的import問題(pycharm可以運行命令行import錯誤)

    關于Python3的import問題(pycharm可以運行命令行import錯誤)

    這篇文章主要介紹了關于Python3的import問題(pycharm可以運行命令行import錯誤),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 利用python實現(xiàn)后端寫網(wǎng)頁(flask框架)

    利用python實現(xiàn)后端寫網(wǎng)頁(flask框架)

    這篇文章主要給大家介紹了關于如何利用python實現(xiàn)后端寫網(wǎng)頁(flask框架)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 基于Python編寫一個根據(jù)姓名測性別的小程序

    基于Python編寫一個根據(jù)姓名測性別的小程序

    這篇文章主要為大家介紹了如何利用Python編寫一款根據(jù)中文名能猜測性別的一款界面化的小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-03-03
  • Python 實現(xiàn)王者榮耀中的敏感詞過濾示例

    Python 實現(xiàn)王者榮耀中的敏感詞過濾示例

    今天小編就為大家分享一篇Python 實現(xiàn)王者榮耀中的敏感詞過濾示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 如何解決jupyter notebook無法導入自己安裝的包

    如何解決jupyter notebook無法導入自己安裝的包

    這篇文章主要介紹了如何解決jupyter notebook無法導入自己安裝的包問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 如何把python項目部署到linux服務器

    如何把python項目部署到linux服務器

    這篇文章主要介紹了如何把python項目部署到linux服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 詳細聊一聊為什么Python沒有main函數(shù)

    詳細聊一聊為什么Python沒有main函數(shù)

    相信很多初學python的人看代碼的時候都會先找一下main()方法,從main往下看,但事實上python中是沒有你理解中的“main()”方法的,下面這篇文章主要給大家介紹了關于為什么Python沒有main函數(shù)的相關資料,需要的朋友可以參考下
    2023-03-03
  • 在Python中使用元類的教程

    在Python中使用元類的教程

    這篇文章主要介紹了在Python中使用元類的教程,是Python當中的基礎知識,代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)貪心算法的示例

    Python實現(xiàn)貪心算法的示例

    這篇文章主要介紹了Python實現(xiàn)貪心算法的示例,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04

最新評論