2

我一直在做一个我被分配去做的项目。这是关于某种停车场,现在自动生成(完成)进入的汽车,我已将它们放入“等待列表”(因为稍后我必须用 GUI 模块表示它们)以便以后成为分配在停车场的一个位置。然后他们必须走出停车场(也是随机的)

当我创建一个总是随机创建汽车的函数时,问题就出现了,现在我不能调用任何其他函数,因为第一个函数是循环的。

问题是,有没有办法同时调用几个循环函数?

谢谢

4

3 回答 3

1

问题是,有没有办法同时调用几个循环函数?

这是一个很好的问题,有几种方法可以做到。

线程可以让你的函数同时运行。线程之间的数据流应该使用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 模块等事件循环来协调事件。 生成器可能会对此有所帮助——它们的工作方式类似于可以暂停和重新启动的功能。

于 2013-05-10T18:00:58.360 回答
0

也许导入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%必要,否则我从不这样做。

但这应该足够简单,无需

于 2013-05-10T17:48:18.917 回答
0

不要有两个无限循环,然后每个都在需要时工作并返回(或可能产生)。然后让你的主事件循环调用两者。像这样的东西:

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)
于 2013-05-10T17:51:02.923 回答