Seite 1 von 1

Datenbankzugriff in Threads

Verfasst: Sonntag 22. Juli 2018, 14:09
von rhu
Moin, moin...

Ich möchte in parallel ablaufenden Threads einen Zugriff auf eine Postgres DB realisieren.
Man kann ja in jedem Thread eine neue Connection aufbauen oder aber eine bestehende Connection nutzen und in dem jeweiligen Thread einen neuen Cursor zu erzeugen.
Jetzt stellt sich mir die Frage, welcher Methode ich den Vorzug geben soll. :?:

DB Version: "PostgreSQL 9.5.13 on x86_64-pc-linux-gnu (Ubuntu 9.5.13-2.pgdg16.04+1), compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609, 64-bit"
genutztes Python Modul: psycopg2 2.7.4
Zugriff: lesen & schreiben

Welcher Variante würdet Ihr den Vorzug geben?
Was muss ich jeweils beachten?

Vielen Dank schon einmal im Voraus für Eure Meinungen!

Re: Datenbankzugriff in Threads

Verfasst: Sonntag 22. Juli 2018, 14:20
von __deets__
Die Methode ganz ohne Threads ist die beste. Warum willst du parallel abfragen? Python parallelisiert mit Threads eh schlecht, und das die DB Daten parallel schneller ausliefert ist zwar nicht unmöglich, aber auch nicht garantiert.

Re: Datenbankzugriff in Threads

Verfasst: Sonntag 22. Juli 2018, 14:28
von rhu
Nicht der DB Zugriff soll durch die Threads beschleunigt werden.
Im konkreten Fall lade ich mehrere Webseiten herunter , werte diese aus und das Ergebnis soll jetzt in eine DB geschrieben werden.
Die parallele Verarbeitung, speziell der Downloads, beschleunigt den gesamten Vorgang ungemein.

Re: Datenbankzugriff in Threads

Verfasst: Sonntag 22. Juli 2018, 14:47
von kbr
Dann mach Dir pro Thread eine neue Connection auf. Im Vergleich zum Download kostet das wenig bis nichts.

Re: Datenbankzugriff in Threads

Verfasst: Sonntag 22. Juli 2018, 14:52
von __blackjack__
Als erstes müsstest Du schauen was das `threadsafety`-Attribut vom Modul erlaubt. Bei `psycopg2` müsste das 2 sein, also „Threads may share the module and connections.“ — `Cursor` müssen also im jeweiligen Thread erstellt werden.

Ich würde eine Verbindung pro Thread erstellen. Denn wenn auch geschrieben werden soll, wird das mit den Transaktionen sonst interessant. Also solange das nicht ”natürlich” funktioniert. Also das die Threads beispielsweise alle am selben Problem arbeiten und ein Thread dann dafür zuständig ist die Transaktion für alle abzuschliessen.

An der Stelle mache ich dann auch immer noch Werbung für SQLAlchemy. :-)

Re: Datenbankzugriff in Threads

Verfasst: Mittwoch 25. Juli 2018, 10:28
von rhu
THX, für die Antworten!
Ich mache jetzt pro Thread eine neue Verbindung auf, der Kommentar von __blackjack__ lässt ja erahnen, das es sonst zu Problemen kommen kann.