Sommaire

SynchronisationSynchronisation

Lorsqu’un programme Multithreadmultithread utilise Owlready pour créer ou modifier des ontologies, plusieurs threads peuvent vouloir écrire dans le quadstore au même moment, ce qui peut causer une corruption de la base de données. Notez que, même si chaque thread écrit sur une ontologie différente, le problème reste le même, car les ontologies partagent en réalité le même quadstore. Dans le cas d’un programme multithread, il est donc nécessaire de synchroniser les écritures (à l’inverse, les lectures n’ont pas besoin de l’être).

En particulier, les serveurs web générés avec Flask sont généralement multithread (par défaut, Flask utilise le serveur Werkzeug qui lance le serveur dans ce mode). Lors du chapitre précédent, nous n’avions pas eu de problème de synchronisation, car le serveur ne faisait que lire l’ontologie, mais ne la modifiait pas.

Owlready gère la synchronisation, de la manière suivante : Owlready verrouille automatiquement la base de données en écriture à l’entrée d’un bloc « with ontologie:... » et la déverrouille à la sortie du bloc. De même, les fonctions et méthodes suivantes sont également synchronisées : get_ontology(), ontology.load(), ontology.destroy() et sync_reasoner() (que nous verrons ...