作者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://webptt.com/cn.aspx?n=bbs/Python/M.1630397115.A.399.html
1F:推 tsoahans: coroutine?08/31 17:09
2F:推 lycantrope: 想要有次序可以给queue FIFO08/31 17:41
感谢上面两位给的建议,不过刚刚翻书稍微看了一下
次序似乎要在已知下一工作阶段为何的情况下才可行?
因为我预计让AI在每一时阶更新时制计画,
也就是说每一次更新後break的时间点都不同
也无从得知该切换哪个路口的号志灯头,
不知道break後该运作哪一个函式,
这部分不知道有没有解?
※ 编辑: chhuang17 (223.137.97.127 台湾), 08/31/2021 18:09:31
3F:推 TitanEric: 留一个dict mapping号志ID跟对应的function?ai计算该08/31 20:38
4F:→ TitanEric: 改变哪个号志出来再执行08/31 20:38
5F:推 lycantrope: 可以用lock,在AI更新时制计画时把平行处理锁起来啊09/01 00:27
感谢以上回覆
虽然我最後还是没有用到各位的想法
不过也是硬干把它写出来了XD
※ 编辑: chhuang17 (223.137.204.214 台湾), 09/05/2021 19:57:17