作者chhuang17 ()
看板Python
標題[問題] 平行處理問題
時間Tue Aug 31 16:05:13 2021
不知道板上有沒有人利用過VISSIM車流模擬軟體
並利用COM進行二次開發的經驗
如果有的話希望能站內信,想好好跟前輩們請教QQ
小弟希望能一口氣控制10個號誌化路口
原先做法想說個別路口的控制分別寫成一個函式,
用multi-processing同時運行10個函式
不過實作後發現不可行
上網查了一下才發現multi-processing無法處理有次序性的問題,
因為利用VISSIM COM控制燈號變換時,必須設定好break的時間點,暫停當前模擬狀態,
然後才能切換我要的燈號,
而這些break的時間點必須由小至大依序排列,否則與VISSIM內部軟體的時間對不上
(比方說我想break在200秒的時候,但VISSIM的模擬秒數已經跑400秒了,
此時我在外部寫的break at 200s 那行程式將會報錯)
也許用過VISSIM的板友不多,不過最主要是想問
python有沒有辦法處理這種有次序性平行處理的方法呢?
(我知道我講得很亂,詳細的說明,有需要會再附上程式碼說明)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.97.127 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1630397115.A.399.html
推 tsoahans: coroutine?08/31 17:09
推 lycantrope: 想要有次序可以給queue FIFO08/31 17:41
感謝上面兩位給的建議,不過剛剛翻書稍微看了一下
次序似乎要在已知下一工作階段為何的情況下才可行?
因為我預計讓AI在每一時階更新時制計畫,
也就是說每一次更新後break的時間點都不同
也無從得知該切換哪個路口的號誌燈頭,
不知道break後該運作哪一個函式,
這部分不知道有沒有解?
※ 編輯: chhuang17 (223.137.97.127 臺灣), 08/31/2021 18:09:31
推 TitanEric: 留一個dict mapping號誌ID跟對應的function?ai計算該08/31 20:38
→ TitanEric: 改變哪個號誌出來再執行08/31 20:38
推 lycantrope: 可以用lock,在AI更新時制計畫時把平行處理鎖起來啊09/01 00:27
感謝以上回覆
雖然我最後還是沒有用到各位的想法
不過也是硬幹把它寫出來了XD
※ 編輯: chhuang17 (223.137.204.214 臺灣), 09/05/2021 19:57:17