JanDMC hat geschrieben:Wenn ich eine Verbindung zur SQLIte Datenbank aufbaue, kann ich diese Verbindung nicht in anderen Threads benutzen, deswegen wollte ich in jeden Thread der gestatet wird eine weitere Verbindung aufbauen.
Hallo Jan!
Du kannst ohne Weiteres je Thread eine eigene Verbindung zur SQLite-Datenbank aufbauen. pysqlite wurde so programmiert, dass es keine Probleme damit geben sollte. (Fehler ausgenommen

)
Ich habe auf der pysqlite-Website immer wieder Hinweise gefunden, dass es funktionieren sollte.
Allerdings wird davor gewarnt, eine Verbindung in mehreren Threads zu benutzen. Es gibt sogar eine eigene Prüfung dafür, damit dieser Fehler nicht passieren kann.
--> Jeder Thread bekommt eine Connection.
Ich weiß leider nicht, ob pysqlite intern die Fehler SQLITE_BUSY und SQLITE_LOCKED abfängt oder ob du selber darauf reagieren musst. Wenn pysqlite selber darauf reagiert, dann musst du nichts mehr machen. Wenn pysqlite den Fehler an dein Programm weiter gibt, dann musst du dich selber darum kümmern, dass die letze Transaktion nach einer kurzen Verschnaufpause wiederholt wird.
Ein Tipp noch:
Code: Alles auswählen
try:
from pysqlite2 import dbapi2 as sqlite3
except ImportError:
import sqlite3
Versuche immer zuerst raus zu finden, ob pysqlite installiert wurde. Dies ist *immer* neuer als die in Python 2.5 eingebaute Version. Je neuer, desto weniger Probleme macht pysqlite, da immer mehr Fehler ausgebessert werden. Auch wenn Python 2.5 schon pysqlite als "sqlite3" mit bringt, empfehle ich dir immer, die neueste Version von
http://www.initd.org/tracker/pysqlite/wiki/pysqlite zu installieren.
sqlite3.threadsafety ergibt bei mir unter Windows, unter Debian, unter Ubuntu (etwas älter) und Ubuntu (aktuell) jeweils 1.
pysqlite ist also so kompiliert, dass es Threading unterstützt. Getestet unter Python 2.3.5, 2.4.x und 2.5.1.
mfg
Gerold
