我一直致力于一个我被指派去做的项目。它是关于某种停车场,进入的汽车,现在自动生成(完成),我把它们放入'等待列表(因为我必须稍后用GUI模块代表它们)以便以后在停车场的一个地点分配。然后他们必须离开停车场(也随机)
当我创建一个随机创建汽车的函数时,问题就出现了,现在我无法调用任何其他函数,因为第一个函数正在循环。
问题是,有没有办法同时调用多个循环函数?
由于
答案 0 :(得分:1)
问题是,有没有办法同时调用多个循环函数?
这是一个很好的问题,有几种方法可以做到。
Threading可以让您的函数同时运行。应使用Queue module:
管理线程之间的数据流# 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 module)来协调事件。 Generators可能对此有所帮助 - 它们的工作方式类似于可以暂停和重新启动的功能。
答案 1 :(得分: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%必要,否则我永远不会这样做。
但这应该足够简单,无需
答案 2 :(得分: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)