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?
Sqlite Locks
Keine threads bzw. nur einen verwenden, weil sqlite damit eh nicht umgehen kann - bestenfalls benutzt es locks & serialisiert deine Zugriffe eh.
@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.
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.
And just another Queue to add.
Danke für die Antworten.
Danke für die Antworten.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]