SimPy se distingue comme un framework de simulation d'événements discrets, conçu spécifiquement pour Python. Il permet aux développeurs de modéliser des processus complexes à travers des fonctions génératrices Python, facilitant ainsi la simulation de composants actifs tels que des clients, des véhicules ou des agents. Un des points forts de SimPy est sa capacité à gérer divers types de ressources partagées, ce qui est essentiel pour modéliser des points de congestion à capacité limitée, comme des serveurs, des caisses enregistreuses ou des tunnels.
Les simulations avec SimPy peuvent être exécutées à la vitesse maximale possible, en temps réel, ou en parcourant manuellement les événements. Bien qu'il soit théoriquement possible de réaliser des simulations continues avec SimPy, le framework ne dispose pas de fonctionnalités spécifiques pour ce type de simulation. En revanche, SimPy peut être considéré comme excessif pour les simulations à pas fixe où les processus n'interagissent pas entre eux ou avec des ressources partagées.
Un exemple simple illustrant deux horloges fonctionnant à des intervalles différents montre la simplicité et la puissance de SimPy :
import simpy
def clock(env, name, tick):
while True:
print(name, env.now)
yield env.timeout(tick)
env = simpy.Environment()
env.process(clock(env, 'fast', 0.5))
env.process(clock(env, 'slow', 1))
env.run(until=2)
La documentation de SimPy comprend un tutoriel pour apprendre les bases en quelques minutes, des guides thématiques approfondissant diverses fonctionnalités, des exemples d'utilisation et une référence API détaillée. SimPy est publié sous la licence MIT, encourageant les développeurs à partager leurs techniques de modélisation avec la communauté SimPy. Pour ceux qui souhaitent approfondir leurs connaissances, une présentation introductive expliquant les concepts de SimPy et fournissant des exemples est disponible en vidéo ou en diapositives.
SimPy a également été réimplémenté dans d'autres langages de programmation, témoignant de sa polyvalence et de son utilité dans le domaine de la simulation. Pour plus de détails sur ces ports, consultez la liste des ports disponibles.