simpype.pipe

SimPype’s pipe.

class simpype.pipe.Pipe(sim, resource, id)

The pipe implements the queueing disciplines.

Parameters:
  • sim (Simulation) – The SimPype simulation object.
  • resource (Resource) – The resource the pipe is associated to.
  • id (str) – The pipe id.
sim

The SimPype simulation object.

Type:Simulation
env

The SimPy environment object.

Type:simpy.Environment
id

The pipe id.

Type:str
resource

The resource the pipe is associated to.

Type:Resource
available

Event signaling the presence of a Message in the pipe.

Type:simpy.events.Event
queue

The dictionary storing the Queue instances associated to this pipe.

Type:dict
add_queue(id, model=None)

Add a new queue to the pipe.

Parameters:
  • id (str) – The id of the new queue.
  • model (str) – The model of the new queue. If model is None, the default queue model is created.
Returns:

Queue

full()

Check if there is at least a Message in the pipe.

Returns:bool
simpype.pipe.dequeue(arg)

Decorator for overloading the default Pipe dequeue behavior.

Parameters:arg (Pipe)(self) – The Pipe instance.

If the overloading is done in scripts, the Pipe instance must be provided as decorator argument.

myresource = sim.add_resource(id = 'myresource')
myresource.add_queue(id = 'myqueue')

@simpype.pipe.dequeue(myresource.pipe)
def dequeue(self):
        return self.queue['myqueue'].pop()

If the overloading is done inside a Pipe subclass, the decorator must be called without any arguments. Pipe instance is automatically provided through self.

class MyPipe(simpype.Pipe):
        def __init__(self, sim, resource, id):
                super().__init__(sim, resource, id)
                self.add_queue(id = 'myqueue')

        @simpype.pipe.dequeue
        def dequeue(self):
                return self.queue['myqueue'].pop()
simpype.pipe.enqueue(arg)

Decorator for overloading the default Pipe enqueue behavior.

Parameters:arg (Pipe)(self) – The Pipe instance.

If the overloading is done in scripts, the Pipe instance must be provided as decorator argument.

myresource = sim.add_resource(id = 'myresource')
myresource.add_queue(id = 'myqueue')

@simpype.pipe.enqueue(myresource.pipe)
def enqueue(self, message):
        return self.queue['myqueue'].push(message)

If the overloading is done inside a Pipe subclass, the decorator must be called without any arguments. Pipe instance is automatically provided through self.

class MyPipe(simpype.Pipe):
        def __init__(self, sim, resource, id):
                super().__init__(sim, resource, id)
                self.add_queue(id = 'myqueue')

        @simpype.pipe.enqueue
        def enqueue(self, message):
                return self.queue['myqueue'].push(message)