我一直在做一个我被分配去做的项目。这是关于某种停车场,现在自动生成(完成)进入的汽车,我已将它们放入“等待列表”(因为稍后我必须用 GUI 模块表示它们)以便以后成为分配在停车场的一个位置。然后他们必须走出停车场(也是随机的)
当我创建一个总是随机创建汽车的函数时,问题就出现了,现在我不能调用任何其他函数,因为第一个函数是循环的。
问题是,有没有办法同时调用几个循环函数?
谢谢
我一直在做一个我被分配去做的项目。这是关于某种停车场,现在自动生成(完成)进入的汽车,我已将它们放入“等待列表”(因为稍后我必须用 GUI 模块表示它们)以便以后成为分配在停车场的一个位置。然后他们必须走出停车场(也是随机的)
当我创建一个总是随机创建汽车的函数时,问题就出现了,现在我不能调用任何其他函数,因为第一个函数是循环的。
问题是,有没有办法同时调用几个循环函数?
谢谢
问题是,有没有办法同时调用几个循环函数?
这是一个很好的问题,有几种方法可以做到。
线程可以让你的函数同时运行。线程之间的数据流应该使用Queue 模块来管理:
# Inter-thread communication
wait_to_park = Queue()
wait_to_exit = Queue()
# Start the simulation
tg = threading.Thread(target=generate_cars)
tp = threading.Thread(target=park_cars)
tu = threading.Thread(target=unpark_cars)
tg.start(); tp.start(); tu.start()
# Wait for simumlation to finish
tg.join()
wait_to_park.join()
tp.join()
wait_to_exit.join()
tu.join()
或者,您可以使用sched 模块等事件循环来协调事件。 生成器可能会对此有所帮助——它们的工作方式类似于可以暂停和重新启动的功能。
也许导入random
然后设置您希望某些事件发生的范围?
def mainLoop():
while True:
x = random.randrange(1,100)
if 0>x>10: do something()
if 10>x>60: do somethingMoreFrequently()
if 60>x>61: do somethingRarely()
等等
如果您真的想同时调用多个循环函数,请准备好了解线程。穿线很困难,除非100%必要,否则我从不这样做。
但这应该足够简单,无需
不要有两个无限循环,然后每个都在需要时工作并返回(或可能产生)。然后让你的主事件循环调用两者。像这样的东西:
def car_arrival():
if need_to_generate_car:
# do car generation stuff
return
def car_departure()
if time_for_car_to_leave:
# do car leaving stuff
return
def event_loop():
while sim_running:
car_arrival()
car_departure()
sleep(0.5)