2015-05-14 28 views
7

Ich habe eine Anwendung, die Daten aus CSV-Dateien in eine Postgres 9.3-Datenbank analysiert und lädt. In der seriellen Ausführung fügen Sie Anweisungen/Cursor-Ausführungen ohne Probleme ein.psycopg2 Fehler: DatabaseError: Fehler ohne Nachricht von der libpq

Ich habe Sellerie im Mix hinzugefügt, um paralleles Parsen und Einfügen der Datendateien hinzuzufügen. Parsing funktioniert gut. Allerdings gehe ich Insert-Anweisungen laufen und ich:

[2015-05-13 11:30:16,464: ERROR/Worker-1] ingest_task.work_it: Exception 
    Traceback (most recent call last): 
    File "ingest_tasks.py", line 86, in work_it 
     rowcount = ingest_data.load_data(con=con, statements=statements) 
    File "ingest_data.py", line 134, in load_data 
     ingest_curs.execute(statement) 
    DatabaseError: error with no message from the libpq 

Antwort

5

ich ein ähnliches Problem auftreten, wenn engine.execute() Multiprozessing. Ich löste dieses Problem schließlich nur engine.dispose() rechts in der ersten Zeile unter der Funktion hinzugefügt werden, wobei die subprocess sollten eintreten, wie in den official document vorgeschlagen:

When a program uses multiprocessing or fork() , and an Engine object is copied to the child process, Engine.dispose() should be called so that the engine creates brand new database connections local to that fork. Database connections generally do not travel across process boundaries.

+0

Genau. Und dies wird bei jeder Multiprocessing/Worker- und Datenbankverbindungseinrichtung auftreten. In der Regel müssen Sie pro Datenbank eine neue Datenbankverbindung erstellen. – Ross