美文网首页
Python实现事件驱动编程EDP, 2022-06-14

Python实现事件驱动编程EDP, 2022-06-14

作者: Mc杰夫 | 来源:发表于2022-06-13 19:06 被阅读0次

    (2022.06.14 Tues)
    这是一个出租车队的运营仿真。每个车的行车时间随机。每辆车有多个动作,在不同的时间点。最先在系统里面运行的是时间值最小的动作。采用优先队列/heap来实现执行出租车动作的动作。

    class Simulator:
        def __init__(self, procs_map):
            self.events = queue.PriorityQueue()
            self.procs = dict(procs_map)
        def run(self, end_time): ➊
            """排定并显示事件,直到时间结束"""
            # 排定各辆出租车的第一个事件
            for _, proc in sorted(self.procs.items()): ➋
                first_event = next(proc) ➌
                self.events.put(first_event) ➍
            # 这个仿真系统的主循环
            sim_time = 0 ➎
            while sim_time < end_time: ➏
                if self.events.empty(): ➐
                    print('*** end of events ***')
                    break
                current_event = self.events.get() ➑
                sim_time, proc_id, previous_action = current_event ➒
                print('taxi:', proc_id, proc_id * ' ', current_event) ➓
                active_proc = self.procs[proc_id] ⓫
                next_time = sim_time + compute_duration(previous_action) ⓬
                try:
                    next_event = active_proc.send(next_time) ⓭
                except StopIteration:
                    del self.procs[proc_id] ⓮
                else:
                    self.events.put(next_event) ⓯
            else: ⓰
                msg = '*** end of simulation time: {} events pending ***'
                print(msg.format(self.events.qsize()))
    

    Reference

    1 流畅的Python,Luciano R. 著,安道等译,中国工信出版社,人民邮电出版社

    相关文章

      网友评论

          本文标题:Python实现事件驱动编程EDP, 2022-06-14

          本文链接:https://www.haomeiwen.com/subject/qbgzmrtx.html