2015-05-14 14 views
7

Tôi có một ứng dụng phân tích và tải dữ liệu từ tệp csv vào cơ sở dữ liệu Postgres 9.3. Trong thực thi nối tiếp chèn câu lệnh/thực thi con trỏ hoạt động mà không có vấn đề gì.Lỗi psycopg2: DatabaseError: lỗi không có thư từ libpq

Tôi đã thêm cần tây trong hỗn hợp để thêm phân tích cú pháp song song và chèn các tệp dữ liệu. Phân tích hoạt động tốt. Tuy nhiên, tôi sẽ chạy các câu lệnh chèn và tôi nhận được:

[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 

Trả lời

5

Tôi gặp phải sự cố tương tự khi đa xử lý engine.execute(). Tôi giải quyết vấn đề này cuối cùng bởi chỉ cần thêm engine.dispose() ngay dòng đầu tiên dưới chức năng nơi sự tiến trình con có nghĩa vụ phải nhập, như đề xuất trong official document:

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

Chính xác. Và điều này sẽ xảy ra với bất kỳ thiết bị kết nối/nhân công và kết nối cơ sở dữ liệu nào. Nói chung, bạn sẽ cần phải tạo một kết nối db mới trên cơ sở từng quy trình. – Ross

Các vấn đề liên quan