主要介绍了Python模拟简单电梯调度算法,涉及Python线程、队列、时间延迟等相关操作技巧,需要的朋友可以参考下。
需求:
某栋楼16层楼,有2部电梯。基于线程思想,模拟一个电梯调度程序。
目的:
1、学习调度算法
2、通过实现电梯调度,体会操作系统调度过程
3、学习特定环境下多线程编程方法
实现过程:
定义people类:
#定义people类
pygame.init()
up = pygame.image.load("up.png")
down = pygame.image.load("down.png")
people = []
count = 5
floor_count = 16
def init_people():
for i in range(0, count):
people_in = random.randint(1, floor_count)
people_out = random.randint(1, floor_count)
if people_in > people_out:
up_down = 2
else:
up_down = 1
t = random.randint(1, 50)
people.append([people_in, people_out, up_down, t, 1])
init_people()
input_finish = False
arrive = 0
elevator_right = False
def people_start():
for i in range(0, count):
if people[i][3] == t:
people[i][4] = 1
输入小人进入电梯的楼层:
# 输入小人进入电梯的楼层
def people_wait():
for i in range(0, count):
if people[i][3] == t:
print(i, "号小人从", people[i][0], "楼按了电梯")
if direction[people[i][0]] == 1:
if people[i][2] == 2:
direction[people[i][0]] = 3
if direction[people[i][0]] == 2:
if people[i][2] == 1:
direction[people[i][0]] = 3
if direction[people[i][0]] == 0:
if people[i][2] == 1:
direction[people[i][0]] = 1
if people[i][2] == 2:
direction[people[i][0]] = 2
if running[people[i][0]] == 0:
running[people[i][0]] = 1
if running[people[i][0]] == 2:
running[people[i][0]] = 3
if running1[people[i][0]] == 0:
running1[people[i][0]] = 1
if running1[people[i][0]] == 2:
running1[people[i][0]] = 3
# 小人在电梯里按楼层
def people_sit():
for j in range(0, count):
if people[j][4] == 1: # 状态
if people[j][0] == i: # 楼层
people[j][4] = 2
print(j, "号小人进入了左边电梯并按了", people[j][1], "楼")
if running[people[j][1]] == 1:
running[people[j][1]] = 3
if running[people[j][1]] == 0:
running[people[j][1]] = 2
def people_sit1():
for j in range(0, count):
if people[j][4] == 1 and people[j][0] == i:
people[j][4] = 2
print(j, "号小人进入了右边电梯并按了", people[j][1], "楼")
if running1[people[j][1]] == 1:
running1[people[j][1]] = 3
if running1[people[j][1]] == 0:
running1[people[j][1]] = 2
# 小人离开电梯
def people_out():
for j in range(0, count):
if people[j][4] == 2 and people[j][1] == i:
people[j][4] = 3