Skip to content

Instantly share code, notes, and snippets.

@tshauck
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tshauck/8826c786fa5b85adb833 to your computer and use it in GitHub Desktop.
Save tshauck/8826c786fa5b85adb833 to your computer and use it in GitHub Desktop.
simpy
import simpy
import time
import pandas as pd
import datetime as dt
import numpy as np
import metrics
class DatedEnvironment(simpy.Environment):
def __init__(self, start_time, end_time, offset='h', initial_time=0):
self.start_time = start_time
self.end_time = end_time
self.offset = offset
super(DatedEnvironment, self).__init__(initial_time)
@property
def offset_td(self):
return np.timedelta64(1, self.offset)
@property
def steps(self):
""" How man steps between start_time and end_time, measured in the offset span. """
return int((self.end_time - self.start_time) / self.offset_td)
def run(self):
super(DatedEnvironment, self).run(until=self.steps)
@property
def now_date(self):
return self.start_time + (self.now * self.offset_td)
@property
def now_ts(self):
return int(self.now_date.tolist().strftime("%s")) * 1000
def producer(env, store):
for i in range(env.steps):
yield env.timeout(1)
yield store.put('job %s' % i)
def consumer(name, env, store):
while True:
yield env.timeout(1)
item = yield store.get()
def log_store_size(simulation_name, env, store):
columns = ["simulation_name", "size", "time"]
while True:
points = [[simulation_name, len(store.items), env.now_ts]]
metrics.write_metrics("store", columns, points)
yield env.timeout(1)
start = np.datetime64('2015-06-01 00:00:00')
end = np.datetime64('2015-07-01 00:00:00')
env = DatedEnvironment(start, end)
store = simpy.Store(env)
prod = env.process(producer(env, store))
consumers = [env.process(consumer(i, env, store)) for i in range(2)]
env.process(log_store_size("sim c", env, store))
env.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment