如何在python中同时运行多个循环函数?
我一直对我被分配做一个项目。它是关于某种停车场的地方是进入汽车,是为了以后是全自动(完成)现在,我已经把他们变成了“等待名单(因为我有一个GUI模块后表示它们)产生分配在停车场的一个地方。然后他们必须走出停车场(也随机)如何在python中同时运行多个循环函数?
当我创建了一个将始终创建汽车随机,现在我不能调用任何其它功能,因为第一个是循环的功能的问题提出。
的问题是,有没有办法来调用几个循环功能在同一时间?
感谢
也许导入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)
谢谢!我想我会试试这个。事情是,如果随机设置下一辆车未来一小时的功能恰好在0秒内产生下一个功能,并且如果整个周期尚未完成,该计划永远不会最终创造汽车。但是,我认为我可以解决特定的问题:)谢谢! – 2013-05-10 18:38:41
的问题是,有没有办法来调用几个循环功能在同一时间?
这是一个很好的问题,有几种方法可以做到这一点。
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可能对此有所帮助 - 它们的功能类似于可以暂停和重新启动的功能。
感谢您的回答雷蒙德!我一直想弄明白,因为我想学习如何使用这个线程模块。 在你建议的代码中,例如wait_to_park,wait_to_exit,generate_cars等都是previeusly声明的函数吗? – 2013-05-10 18:29:39
尝试使用线程模块http://docs.python.org/2/library/threading.html。但要小心GIL http://wiki.python.org/moin/GlobalInterpreterLock – Pramod 2013-05-10 17:41:41
除非整个模拟受CPU限制,否则没有特别的理由要“小心GIL”。大多数情况下,线程对于诸如停车场问题的模拟非常有效。 – 2013-05-10 18:02:43