2016-05-24 17 views
0

Ich habe drei Programme ausgeführt, von denen eines über eine Tabelle in meiner Datenbank non-stop iteriert (immer wieder in einer Schleife), nur lesen, mit einer SELECT Anweisung .Sperren und entsperren Datenbankzugriff - Datenbank ist gesperrt

Die anderen Programme haben eine Zeile, wo sie eine Zeile in die Tabelle einfügen und eine Zeile, wo sie gelöscht werden. Das Problem ist, dass ich oft einen Fehler sqlite3.OperationalError: database is locked bekomme.

Ich versuche, eine Lösung zu finden, aber ich verstehe nicht die genaue Ursache des Problems (ist Lesen und Schreiben in der gleichen Zeit, was diesen Fehler auftreten? Oder das Schreiben und Löschen? Vielleicht beides nicht soll funktionieren).

Wie auch immer, ich suche nach einer Lösung. Wenn es ein einzelnes Programm wäre, könnte ich die Datenbank-E/A mit Mutexen und anderen Multithreading-Tools vergleichen, aber das ist es nicht. Wie kann ich warten, bis die Datenbank zum Lesen/Schreiben/Löschen entsperrt ist, ohne zu viel CPU zu verwenden?

+0

Welcher der drei gibt den Fehler? BTW, Löschung schreibt auch. –

+1

Warum verwenden Sie SQLite dafür? Es ist nicht wirklich darauf ausgelegt, dass mehrere Dinge gleichzeitig darauf zugreifen. – jonrsharpe

+0

@jonrsharpe Mein System wurde auf SQLite gebaut und jetzt muss ich es aktualisieren, um diese Funktion zu haben, von der ich nicht wusste, dass ich sie brauche. In diesem Stadium des Projekts ist der Wechsel zu etwas wie MySQL nicht sinnvoll. – Jonathan

Antwort

0

Sie benötigen Datenbanken zu wechseln ..

Ich würde verwenden Sie die folgende: postgresql als meine Datenbank psycopg2 als Treiber

die Syntax ist ziemlich ähnlich wie SQLite und die Migration sollte nicht sein schwer für dich

Verwandte Themen