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 ...