SQLAlchemy / Postgres破坏管道错误

时间:2014-10-20 20:47:16

标签: python postgresql flask sqlalchemy

我有一个网络抓取应用程序,它收集数据并将其存储在数据库中。它通常运行正常,但每天有几次像这样的间歇性错误:

OperationalError: (OperationalError) server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the
request. could not send startup packet: Broken pipe

我认为这是因为下面一批代码(发生错误的地方)处理大量数据,我不知道如何优化它。

编辑:我认为这是原因,并在下面包含了其他信息。如果出现此错误的其他原因,我很乐意知道如何修复它:)

由于它是一个网络刮刀,它会定期轮询网页以获取数据。每次轮询时,它都会收集2000到3000条记录。这些记录中有50到100个是新记录,但其余记录的某些属性可能有新信息。

另外值得注意的是:我使用Web抓取数据中的ID作为数据库中的主键,因此程序在创建对象时已经知道ID,即使它尚未在数据库中。

这是带有一些附加评论的代码:

#objs is a list of Models of all the information it just scraped. This 
#finds the oldest timestamp in this set so I can reduce the database query.
#I don't know how many this tends to be.
earliest_scraped = min(o.timestamp for o in objs)

#create the sqlalchemy db session
session = db_setup()

#this queries the objects already in the database, reduced by the timestamp
#above so it is only objects which might overlap with what was scraped
existing = session.query(
    Model
).filter(
    Model.timestamp > earliest_scraped
)

#this merges the list of objects with the query so it updates any existing
#items and adds any new items
existing.merge_result(objs)

#commit and close
session.commit()
session.close()

1 个答案:

答案 0 :(得分:0)

经过大量的修改后,由于系统内存不足,这次崩溃似乎一直在发生。

这是因为应用程序中的内存泄漏与上面的代码无关。