12

我有一个应用程序可以解析 csv 文件中的数据并将其加载到 Postgres 9.3 数据库中。在串行执行中插入语句/游标执行没有问题。

我在混合中添加了 celery 以添加数据文件的并行解析和插入。解析工作正常。但是,我去运行插入语句,我得到:

[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
4

1 回答 1

17

我在 multiprocessing 时遇到了类似的问题engine.execute()。我最终解决了这个问题,只需engine.dispose()在子进程应该进入的函数下的第一行添加正确的,如官方文档中所建议的:

当一个程序使用多处理或fork(),并且一个Engine对象被复制到子进程时,Engine.dispose()应该调用,以便引擎在该分叉本地创建全新的数据库连接。数据库连接通常不会跨越进程边界。

于 2015-10-25T16:18:15.273 回答