我一直對我被分配做一個項目。它是關於某種停車場的地方是進入汽車,是爲了以後是全自動(完成)現在,我已經把他們變成了「等待名單(因爲我有一個GUI模塊後表示它們)產生分配在停車場的一個地方。然後他們必須走出停車場(也隨機)如何在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