Seite 1 von 1
Sqlite Locks
Verfasst: Freitag 25. Mai 2012, 22:01
von jbs
Hey,
ich greife via sqlalchemy auf eine sqlite3-Datenbank zu. Leider bekomme ich einen OperationalError (database is locked).
Ich versuche in zwei Threads in die Datenbank zu schreiben. Gibt es da einen way-to-do um solche Fehler zu vermeiden?
Re: Sqlite Locks
Verfasst: Freitag 25. Mai 2012, 22:20
von deets
Keine threads bzw. nur einen verwenden, weil sqlite damit eh nicht umgehen kann - bestenfalls benutzt es locks & serialisiert deine Zugriffe eh.
Re: Sqlite Locks
Verfasst: Freitag 25. Mai 2012, 22:44
von lunar
@jbs: Das sqlite-Modul in der Standardbibliothek unterstützt keine threadsicheren Verbindungen, und erlaubt mithin nicht, eine Verbindung zwischen mehreren Threads zu teilen. Du musst jedem Thread seine eigene Datenbankverbindung zukommen lassen.
Je nachdem, wie viele Threads zu hast, ist das allerdings wenig performant, da SQLite Schreibzugriffe auf Datenbanken nur schwerlich parallelisieren kann. Mit einer klassischen Consumer-Producer-Architektur, in der nur ein Thread die Datenbank beschreibt, und alle anderen Threads diesem ihre „Aufträge“ über eine Queue mitteilen, bist Du dann wahrscheinlich besser bedient.
@deets: SQLite kann – sofern entsprechend kompiliert – durchaus eine Datenbank mehreren Threads zur Verfügung stellen, und – zwar langsam, aber möglich – sogar Datenbankverbindungen zwischen Threads teilen. Das allerdings unterstützt der Datenbankadapter in der Standardbibliothek laut Dokumentation nicht.
Re: Sqlite Locks
Verfasst: Freitag 25. Mai 2012, 23:14
von jbs
And just another Queue to add.
Danke für die Antworten.