Skip to content

Commit

Permalink
Merging the configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
Mallets committed Mar 16, 2018
1 parent 131067e commit ea768cb
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 14 deletions.
2 changes: 1 addition & 1 deletion docs/conf.py
Expand Up @@ -63,7 +63,7 @@
# The short X.Y version.
version = '1.0.0'
# The full version, including alpha/beta/rc tags.
release = 'rc8'
release = 'rc9'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -14,7 +14,7 @@
# Versions should comply with PEP440. For a discussion on single-sourcing
# the version across setup.py and the project code, see
# https://packaging.python.org/en/latest/single_source_version.html
version='1.0.0.rc8',
version='1.0.0.rc9',
description='SimPype is a simulation framework based on Simpy that relies on the concepts of resource and pipe.',
long_description=long_description,
# The project's main homepage.
Expand Down
2 changes: 1 addition & 1 deletion simpype/__init__.py
Expand Up @@ -58,4 +58,4 @@ def compile_toc(entries, section_marker='='):
__all__ = [obj.__name__ for section, objs in toc for obj in objs]

__path__ = extend_path(__path__, __name__)
__version__ = '1.0.0.rc8'
__version__ = '1.0.0.rc9'
5 changes: 4 additions & 1 deletion simpype/message.py
Expand Up @@ -241,6 +241,7 @@ def __init__(self, sim, resource, id):
self.generated = self.env.now
self.generator = resource
self.is_alive = True
self.log = True
self.location = resource
self.property = PropertyDict(self.sim)
self.seq_num = 0
Expand Down Expand Up @@ -337,6 +338,7 @@ def copy(self):
message.seq_num = copy.deepcopy(self.seq_num)
message.visited = copy.copy(self.visited)
message.is_alive = copy.deepcopy(self.is_alive)
message.log = copy.deepcopy(self.log)
message.next = copy.copy(self.next)
message.pipeline = copy.copy(self.pipeline)
for p in self.property.values():
Expand Down Expand Up @@ -405,7 +407,8 @@ def timestamp(self, description):
"""
ts = Timestamp(self, self.env.now, self.resource, description)
self.sim.log.write(ts)
if self.log and self.location.log:
self.sim.log.write(ts)
return ts

def unsubscribe(self, id):
Expand Down
12 changes: 4 additions & 8 deletions simpype/pipe.py
Expand Up @@ -156,6 +156,7 @@ def __init__(self, sim, resource, id):
self.sim = sim
self.env = sim.env
self.id = id
self.log = True
self.resource = resource
self.available = self.env.event()
self.queue = {}
Expand All @@ -168,22 +169,17 @@ def _message_dropped(self, message, cause):

def _wait_loop(self):
while True:
yield self.resource.free & self.available
yield self.resource.available & self.available
self.available = self.env.event()
if self.resource.free.triggered and \
len(self.resource.task)+1 >= self.resource.capacity:
self.resource.free = self.env.event()
self.resource.free()
message = yield self.env.process(self.dequeue())
if isinstance(message, simpype.Message):
self.env.process(self._service(message))
self.full()

def _service(self, message):
yield self.env.process(self.resource.service(message))
if not self.resource.free.triggered and \
len(self.resource.task) < self.resource.capacity:
self.resource.free.succeed()

self.resource.free()

def add_queue(self, id, model = None):
""" Add a new queue to the pipe.
Expand Down
1 change: 1 addition & 0 deletions simpype/queue.py
Expand Up @@ -153,6 +153,7 @@ def __init__(self, sim, pipe, id):
self.env = sim.env
self.id = id
self.pipe = pipe
self.log = True
self.buffer = []
self.capacity = float('inf')
self.active = self.env.event().succeed()
Expand Down
11 changes: 9 additions & 2 deletions simpype/resource.py
Expand Up @@ -183,11 +183,11 @@ def __init__(self, sim, id, capacity = 1, pipe = None):
self.sim = sim
self.env = sim.env
self.id = id
self.log = True
self.capacity = capacity
self.free = self.env.event().succeed()
self.available = self.env.event().succeed()
self.pipe = simpype.build.pipe(self.sim, self, self.id, pipe)
self.random = simpype.random.RandomDict(self.sim)
self.blocking = True
self.task = {}

def _message_dropped(self, message, cause):
Expand All @@ -197,6 +197,13 @@ def _message_dropped(self, message, cause):
assert tid in self.task
self.task[tid].interrupt(cause = cause)

def free(self):
if self.available.triggered:
if len(self.task)+1 >= self.capacity:
self.available = self.env.event()
else:
if len(self.task) < self.capacity:
self.available.succeed()

def add_task(self, message, process):
t = Task(self.sim, message, process)
Expand Down
22 changes: 22 additions & 0 deletions tests/all.py
Expand Up @@ -326,6 +326,28 @@ def enqueue(self, message):
p20a = sim.add_pipeline(gen20a, res20)
p20b = sim.add_pipeline(gen20b, res20)

# Gen21 |-> Res21
gen21 = sim.add_generator(id = 'gen21')
gen21.random['arrival'] = {0: lambda: 1.0}
gen21.message.log = False
res21 = sim.add_resource(id = 'res21')
p21 = sim.add_pipeline(gen21, res21)

# Gen22 |-> Res22
gen22 = sim.add_generator(id = 'gen22')
gen22.random['arrival'] = {0: lambda: 1.0}
res22 = sim.add_resource(id = 'res22')
res22.pipe.log = False
p22 = sim.add_pipeline(gen22, res22)

# Gen23 |-> Res23
gen23 = sim.add_generator(id = 'gen23')
gen23.random['arrival'] = {0: lambda: 1.0}
res23 = sim.add_resource(id = 'res23')
res23.pipe.log = False
res23.pipe.queue['default'].log = False
p23 = sim.add_pipeline(gen23, res23)

sim.log.file = True
sim.log.print = False
sim.run(until = 30)
Expand Down

0 comments on commit ea768cb

Please sign in to comment.