我有一个应用程序,可以将csv文件中的数据解析并加载到Postgres 9.3数据库中。 在串行执行中,插入语句/游标执行工作没有问题。
我在混合中添加了芹菜,以添加并行解析和插入数据文件。 解析工作正常。但是,我去运行插入语句,我得到:
[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
我在多处理engine.execute()
时遇到了类似的问题。我最终解决了这个问题,只需在子进程应该进入的函数下的第一行中添加engine.dispose()
,如官方文档所示:
当程序使用多处理或
fork()
,并且Engine
对象是 复制到子进程,应调用Engine.dispose()
以便 引擎会在该分叉的本地创建全新的数据库连接。数据库 连接通常不会跨进程边界传输。