Package SimPy :: Module stepping |
[hide private]
[frames] | no frames]

# Source Code for Module SimPy.stepping

     1  # coding=utf-8

     2  """

     3  This is a small utility for interactively stepping through a simulation.

     4

     5  Usage:

     6      import stepping

     7      (simulation model)

     8      stepping.stepping(Globals) # instead of 'simulate(until = endtime)

     9  """
    10  # $Revision: 464 $ $Date: 2010-04-05 05:59:53 +0200 (Mo, 05 Apr 2010) $ kgm

    11  # SimPy version: 2.1

    12 -def stepping(glob):
    13      asim = glob.sim
    14      help = {'s':"next event",'r':"run to end",'e':"end run",

    15             '<time>':"skip to event at <time>",'l':"show eventlist",

    16             'p<name>':"skip to event for <name>",'h':"help"}
    17      evlist = asim._timestamps
    18      while True:
    19          if not evlist:
    20              print "No more events at t=%s"%asim.now()
    21              break
    22          tEvt = evlist[0][0]
    23          who = evlist[0][2]
    24          while evlist[0][3]: #skip cancelled event notices
    25              step()
    26          print "\nTime now: %s, next event at: t=%s for process: %s "\

    27                %(asim.now(),tEvt,who.name)
    28

    29          while True:
    30              cmd = raw_input("Command ('h' for help): ")
    31              if cmd == "h":
    32                  for i in help:
    33                      print i, ":", help[i]
    34              else:
    35                  break
    36          try:
    37              nexttime = float(cmd)
    38              while asim.peek() < nexttime:
    39                  asim.step()
    40          except:
    41              if cmd == 's':
    42                  asim.step()
    43              elif cmd == 'r':
    44                  while evlist:
    45                      asim.step()
    46                  print "Run ended at t=%s"%asim.now()
    47                  break
    48              elif cmd == 'e':
    49                  asim.stopSimulation()
    50                  break
    51              elif cmd == 'l':
    52                  print "Events scheduled: \n%s"%asim.allEventNotices()
    53              elif cmd[0] == 'p':
    54                  while evlist and evlist[0][2].name <> cmd[1:]:
    55                      asim.step()
    56              else:
    57                  print "%s not a valid command" % cmd
    58

    59  if __name__ == "__main__":
    60      from SimPy.SimulationTrace import *
    61

    62 -    class Car(Process):
    63 -        def drive(self, speed, howlong):
    64              going = speed
    65              yield hold,self,howlong
    66              going = 0
    67

    68      initialize()
    69      b = Car(name = "Beemer")
    70      activate(b, b.drive(speed = 180, howlong = 45))
    71      c = Car(name = "Caddy")
    72      activate(c, c.drive(speed = 120, howlong = 120), at = 25)
    73      stepping(Globals)
    74